<?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[Grundlagenfrage Vererbung und Überschreiben]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne wissen, wie ich die folgende Situation ohne fleissiges Copy&amp;Paste lösen kann:<br />
Ich habe eine Basisklasse für Dokumente, die von CDocument abgeleitet ist. In dieser Klasse bzw. der jeweils betroffenen abgeleiteten Klasse werden u.a. die Druckbefehle empfangen.</p>
<p>Und ich habe eine Basisklasse für Recordsets, die von CRecordset abgeleitet ist. In der bzw. der jeweils betroffenen abgeleiteten Klasse wird die Druckausgabe übernommen.</p>
<p>Jedes abgeleitete Dokument hat eine GetDaten Funktion, die immer die passende Recordsetklasse zurück gibt.</p>
<p>Also:<br />
CKundenDoc: CKundenSet&amp; GetDaten()<br />
CFirmenDoc: CFirmenSet&amp; GetDaten()<br />
usw.<br />
Könnte man denn in der Basisklasse ein GetDaten einbauen, was immer das richtige Recordset zurückgibt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/151781/grundlagenfrage-vererbung-und-überschreiben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 16:14:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/151781.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Jun 2006 13:04:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Thu, 29 Jun 2006 13:04:55 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne wissen, wie ich die folgende Situation ohne fleissiges Copy&amp;Paste lösen kann:<br />
Ich habe eine Basisklasse für Dokumente, die von CDocument abgeleitet ist. In dieser Klasse bzw. der jeweils betroffenen abgeleiteten Klasse werden u.a. die Druckbefehle empfangen.</p>
<p>Und ich habe eine Basisklasse für Recordsets, die von CRecordset abgeleitet ist. In der bzw. der jeweils betroffenen abgeleiteten Klasse wird die Druckausgabe übernommen.</p>
<p>Jedes abgeleitete Dokument hat eine GetDaten Funktion, die immer die passende Recordsetklasse zurück gibt.</p>
<p>Also:<br />
CKundenDoc: CKundenSet&amp; GetDaten()<br />
CFirmenDoc: CFirmenSet&amp; GetDaten()<br />
usw.<br />
Könnte man denn in der Basisklasse ein GetDaten einbauen, was immer das richtige Recordset zurückgibt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088365</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 29 Jun 2006 13:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Thu, 29 Jun 2006 13:06:47 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Könnte man denn in der Basisklasse ein GetDaten einbauen, was immer das richtige Recordset zurückgibt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Wenn die beiden ne gemeinsame Basisklasse haben, könntest Du die als Rückabetyp angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088367</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 29 Jun 2006 13:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Thu, 29 Jun 2006 13:12:02 GMT]]></title><description><![CDATA[<p>Kann man also sowas machen:<br />
in BasisDoc:</p>
<pre><code class="language-cpp">virtual CBasisSet&amp; GetDaten();
</code></pre>
<p>in KundenDoc:</p>
<pre><code class="language-cpp">virtual CKundenSet&amp; GetDaten();
</code></pre>
<p>in FirmenDoc:</p>
<pre><code class="language-cpp">virtual CFirmenSet&amp; GetDaten();
</code></pre>
<p>und der nimmt dann immer die Funktion der abgeleiteten Klasse?<br />
Die Druckfunktion in der Basisklasse ist nämlich momentan nur ein Dummy, der später mal so aussehen wird:</p>
<pre><code class="language-cpp">virtual void Drucke() = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1088372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088372</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 29 Jun 2006 13:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Thu, 29 Jun 2006 13:17:45 GMT]]></title><description><![CDATA[<p>Ja. Der Rückgabewert gehört nicht zur Signatur einer Funktion. Desweiteren werden virtuelle Funktionen immer nach dem dynamischen Typ aufgelöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088377</guid><dc:creator><![CDATA[Michael E. logged out]]></dc:creator><pubDate>Thu, 29 Jun 2006 13:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Thu, 29 Jun 2006 13:20:35 GMT]]></title><description><![CDATA[<p>Cool, dann werde ich das Morgen mal umbauen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088383</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 29 Jun 2006 13:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 07:41:07 GMT]]></title><description><![CDATA[<p>Es geht nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
In BasisDoc.h</p>
<pre><code class="language-cpp">virtual CBasisSet&amp; GetDaten() = 0;
</code></pre>
<p>In KundenDoc.h</p>
<pre><code class="language-cpp">CKundenSet&amp; GetDaten();
</code></pre>
<pre><code>error C2555: 'CKundenDoc' von 'CKundenDoc::GetDaten': Neue Version der virtuellen Funktion unterscheidet sich von 'CBasisDoc::GetDaten' 
nur hinsichtlich des Ergebnistyps oder der Aufrufkonvention
</code></pre>
<p>Naja, und dann noch die üblichen Folgefehler... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code>error C2259: &quot;CKundenDoc&quot; : Instanz von abstrakter Klasse kann auf Grund nachfolgender Elemente nicht erstellt werden:
warning C4259: 'class CBasisSet &amp;__thiscall CBasisDoc::GetDaten(void)' : Rein virtuelle Funktion wurde nicht definiert
</code></pre>
<p>Geht das vielleicht nur mit Zeigern? Dann hätte ich viel umzubauen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088823</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Fri, 30 Jun 2006 07:41:07 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 07:38:09 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Kann man also sowas machen:<br />
in BasisDoc:</p>
<pre><code class="language-cpp">virtual CBasisSet&amp; GetDaten();
</code></pre>
<p>in KundenDoc:</p>
<pre><code class="language-cpp">virtual CKundenSet&amp; GetDaten();
</code></pre>
<p>in FirmenDoc:</p>
<pre><code class="language-cpp">virtual CFirmenSet&amp; GetDaten();
</code></pre>
<p>[/cpp]</p>
</blockquote>
<p>Das sollte AFAIK nicht gehen dürfen. Die virtuellen Methoden müssen beim überschreieben in den abgeleiteten Klassen exakt so aussehen wie in der Basisklasse ...</p>
<p>Edit: Beachte camper's Post <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088837</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 30 Jun 2006 07:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 07:43:26 GMT]]></title><description><![CDATA[<p>Freak_Coder schrieb:</p>
<blockquote>
<p>Das sollte AFAIK nicht gehen dürfen. Die virtuellen Methoden müssen beim überschreieben in den abgeleiteten Klassen exakt so aussehen wie in der Basisklasse ...</p>
</blockquote>
<p>Hatte Michael nicht gesagt, dass das geht? Oder hab ich da nur was rausgelesen, was ich lesen wollte? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<blockquote>
<p>Edit: Beachte camper's Post <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Den da? <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-151830.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-151830.html</a><br />
Da hab ich den Zusammenhang noch nicht erkannt, aber ich denk nochmal drüber nach.</p>
<p>Eventuell mache ich jetzt einfach eine GetBasisSet. Die heißt anders und dann sollte es gehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088843</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Fri, 30 Jun 2006 07:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 07:46:58 GMT]]></title><description><![CDATA[<p>Oh sorry. Ich meinte den von Jester nicht camper. Die erste Antwort auf deinen Thread <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088846</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 30 Jun 2006 07:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 08:34:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
damit das funktioniert, muss dein Compiler &quot;covariante Rückgabetypen&quot; unterstützen. Der Rückgabetyp einer virtuellen Methode kann sich genau dann von der einer Basisklassenversion unterscheiden, wenn er spezieller ist, als der der Basisklasse.</p>
<p>Bsp:</p>
<pre><code class="language-cpp">class X {
public:
	virtual X&amp; foo() = 0;
};

class Y : public X {
public:
	virtual Y&amp; foo();
};

class Z : public Y {
public:
	virtual Z&amp; foo();
};
</code></pre>
<p>Das ist völlig legal, für ältere Compiler wie z.B. den VC 6.0 allerdings nicht verdaubar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088876</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 30 Jun 2006 08:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 08:55:19 GMT]]></title><description><![CDATA[<p>und dann gibt es noch eine denkschule, die der ansicht ist, dass virtuelle funktionen niemals public sein sollten.</p>
<pre><code class="language-cpp">class X {
public:
    X&amp; foo() { return foo_impl(); }
protected:
    virtual X&amp; foo_impl() = 0;
};

class Y : public X {
public:
    Y&amp; foo() { return static_cast&lt;Y&amp;&gt;(foo_impl()); }
protected:
    virtual X&amp; foo_impl();
};

class Z : public Y {
public:
    Z&amp; foo() { return static_cast&lt;Z&amp;&gt;(foo_impl()); }
protected:
    virtual X&amp; foo_impl();
};
</code></pre>
<p>und schon sind wir nicht mehr auf compilerunterstützung für kovariante returntypen angewiesen. tatsächlich können wir sogar noch mahr tun. compilergestützte kovarianz beschränkt sich ja auf referenzen und pointer. wir könnten hier z.b. auch ohne weiteres smart pointer einsetzen (sofern sie untereinander konvertierbar sind).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088891</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 30 Jun 2006 08:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 09:06:20 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class X {
public:
    X&amp; foo() { return foo_impl(); }
protected:
    virtual X&amp; foo_impl() = 0;
};

class Y : public X {
public:
    Y&amp; foo() { return static_cast&lt;Y&amp;&gt;(foo_impl()); }
protected:
    virtual X&amp; foo_impl();
};

class Z : public Y {
public:
    Z&amp; foo() { return static_cast&lt;Z&amp;&gt;(foo_impl()); }
protected:
    virtual X&amp; foo_impl();
};
</code></pre>
</blockquote>
<p>*STAUN* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> *FINDSCHÖN*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088904</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 30 Jun 2006 09:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 09:24:07 GMT]]></title><description><![CDATA[<p>Freak_Coder schrieb:</p>
<blockquote>
<p>*STAUN* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> *FINDSCHÖN*</p>
</blockquote>
<p>In C++ Kreisen firmiert diese Denkschule unter dem Begriff &quot;non-virtual interface idiom&quot; (bzw. pattern) kurz NVI. Gut erklärt wird NVI z.B. in Sutters und Alexandrescus &quot;C++ Coding Standards&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088917</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 30 Jun 2006 09:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage Vererbung und Überschreiben on Fri, 30 Jun 2006 09:49:19 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Das ist völlig legal, für ältere Compiler wie z.B. den VC 6.0 allerdings nicht verdaubar.</p>
</blockquote>
<p>Okay, da war der Haken... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Das mit der GetBasisSet funktioniert aber prima. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Über das Beispiel eben von camper muss ich wohl nochmal in Ruhe nachdenken.<br />
Bei so arg theoretischen Sachen habe ich irgendwie Verständnisschwierigkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088946</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Fri, 30 Jun 2006 09:49:19 GMT</pubDate></item></channel></rss>