<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[anfängerfrage zu oop]]></title><description><![CDATA[<p>hey</p>
<p>naja zunächst möchte ich erwähnen dass ich nicht sonderlich den plan von c++ habe, besser gesagt lerne ich c++ erst...</p>
<p>also da redunanter code mühsam und schlecht zu warten ist, mache ich meinen nicht-konstanten accessor etwa so:</p>
<pre><code>template&lt;unsigned SizeX, unsigned SizeY&gt;
virtual Buffer&lt;SizeX, SizeY&gt;::EntryType&amp; Buffer&lt;SizeX, SizeY&gt;::operator() (SizeType IndexX, SizeType IndexY)
{
	return const_cast&lt;EntryType&amp;&gt;((*static_cast&lt;Buffer&lt;SizeX, SizeY&gt; const*&gt;(this))(IndexX, IndexY));
}
</code></pre>
<p>nun da es für die implementierung von &quot;Buffer&quot; mehrere möglichkeiten gibt, habe ich eine abstrakte basisklasse, namens &quot;BufferInterface&quot;. (BufferInterface ist kein klassentemplate)</p>
<p>ich habe mehrere buffer-klassen von &quot;BufferInterface&quot; abgeleitet, bei der implementierung von allen ist mir aufgefallen, dass der code vom nicht-konstanten accessor sehr ähnlich ist, es wird immer der konstante accessor angesprochen inkl. casting usw.</p>
<p>jetzt kommt die eigentliche frage: kann ich den nicht-konstanten accessor in der basisklasse virtuell, jedoch nicht rein virtuell deklarieren und dabei etwa den code wie bei gezeigtem listing vordefinieren? ich hab dabei ja bedenken, weil ich nicht weiss, was ich da in die &lt;&gt; vom static_cast reintun soll. kann mir jemand dabei helfen? mein ziel ist einfach, dass die basisklassen keinen nicht-konstanten accessor definieren müssen und dass dennoch bei allen der konstante (und möglicherweise überschriebene) accessor aufgerufen wird.</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320977/anfängerfrage-zu-oop</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:06:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320977.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Oct 2013 15:55:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to anfängerfrage zu oop on Sat, 19 Oct 2013 15:55:31 GMT]]></title><description><![CDATA[<p>hey</p>
<p>naja zunächst möchte ich erwähnen dass ich nicht sonderlich den plan von c++ habe, besser gesagt lerne ich c++ erst...</p>
<p>also da redunanter code mühsam und schlecht zu warten ist, mache ich meinen nicht-konstanten accessor etwa so:</p>
<pre><code>template&lt;unsigned SizeX, unsigned SizeY&gt;
virtual Buffer&lt;SizeX, SizeY&gt;::EntryType&amp; Buffer&lt;SizeX, SizeY&gt;::operator() (SizeType IndexX, SizeType IndexY)
{
	return const_cast&lt;EntryType&amp;&gt;((*static_cast&lt;Buffer&lt;SizeX, SizeY&gt; const*&gt;(this))(IndexX, IndexY));
}
</code></pre>
<p>nun da es für die implementierung von &quot;Buffer&quot; mehrere möglichkeiten gibt, habe ich eine abstrakte basisklasse, namens &quot;BufferInterface&quot;. (BufferInterface ist kein klassentemplate)</p>
<p>ich habe mehrere buffer-klassen von &quot;BufferInterface&quot; abgeleitet, bei der implementierung von allen ist mir aufgefallen, dass der code vom nicht-konstanten accessor sehr ähnlich ist, es wird immer der konstante accessor angesprochen inkl. casting usw.</p>
<p>jetzt kommt die eigentliche frage: kann ich den nicht-konstanten accessor in der basisklasse virtuell, jedoch nicht rein virtuell deklarieren und dabei etwa den code wie bei gezeigtem listing vordefinieren? ich hab dabei ja bedenken, weil ich nicht weiss, was ich da in die &lt;&gt; vom static_cast reintun soll. kann mir jemand dabei helfen? mein ziel ist einfach, dass die basisklassen keinen nicht-konstanten accessor definieren müssen und dass dennoch bei allen der konstante (und möglicherweise überschriebene) accessor aufgerufen wird.</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361401</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Sat, 19 Oct 2013 15:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to anfängerfrage zu oop on Sat, 19 Oct 2013 16:13:23 GMT]]></title><description><![CDATA[<p>Ich sehe hier zwar nicht den Vorteil von Vererbung, aber so könnte das gehen:</p>
<pre><code class="language-cpp">struct BasicBuffer {
  typedef std::size_t SizeType;
  typedef int EntryType;
  virtual EntryType&amp; operator()(SizeType IndexX, SizeType IndexY) =0;
  virtual EntryType const&amp; operator()(SizeType IndexX, SizeType IndexY)const=0;
};
template &lt;typename Deriv&gt;
struct BasicBufferCRTP : BasicBuffer {
  virtual EntryType&amp; operator()(SizeType IndexX, SizeType IndexY)
  {
    return const_cast&lt;EntryType&amp;&gt;(static_cast&lt;Deriv const&amp;&gt;(*this)(IndexX, IndexY));
  }
};

template&lt;unsigned SizeX, unsigned SizeY&gt;
struct Buffer : BasicBufferCRTP&lt;Buffer&lt;SizeX, SizeY&gt; &gt; {
  typedef BasicBuffer::EntryType EntryType;
  typedef BasicBuffer::SizeType SizeType;
  int data;
  virtual EntryType const&amp; operator() (SizeType IndexX, SizeType IndexY)  const
  {
    return data;
  }  
};

int main()
{
  Buffer&lt;2,5&gt; b;
  std::cout &lt;&lt; b(4,5) &lt;&lt; '\n';
  std::cout &lt;&lt; static_cast&lt;Buffer&lt;2,5&gt; const&amp;&gt;(b)(4,5) &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2361406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361406</guid><dc:creator><![CDATA[smartboy]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to anfängerfrage zu oop on Sat, 19 Oct 2013 17:28:54 GMT]]></title><description><![CDATA[<p>joa danke, sieht schonmal gut aus, werde ich mal so umsetzen.</p>
<p>naja grund für vererbung bei meinem code, ich nutze einfach referenzen auf buffer-interfaces für verschiedene dinge, die dann den buffer je nach dem befüllen. die verschiedenen abgeleiteten instanziierbaren buffer mache ich meistens nach dem adapter pattern mit anderen klassen, z.b. einem bitmap handler usw. (vll kann man da später auch was basteln damit ich in den framebuffer schreiben kann)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361435</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Sat, 19 Oct 2013 17:28:54 GMT</pubDate></item></channel></rss>