<?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[C++ Vererbung austricksen?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Klasse A, welche von einem Generator erzeugt wird. Diese Sieht im wesentlichen so aus:</p>
<pre><code>class A: public B {
public:
        bool X(); // defined but not implemented in A.cpp
	void Y(){Z();}

	void Z(){X();}
};
</code></pre>
<p>B wurde von mir erstellt:</p>
<pre><code>class B : public SuperKlasse {
public:
};
</code></pre>
<p>Wie man sieht, fehlt eine Implementierung für A::X(). Nun habe ich aber durch den Generator nicht nur ein A bekommen, sondern viele A's. Diesen fehlt allen eine Implementierung von X(). Die ist aber überall die gleiche. Kann man nun die Vererbung irgendwie austricksen, so dass ich X() schon in B definieren kann? Vermutlich nicht, da X() schon in A definiert ist, oder?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332173/c-vererbung-austricksen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 13:39:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332173.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Apr 2015 08:24:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 08:24:23 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Klasse A, welche von einem Generator erzeugt wird. Diese Sieht im wesentlichen so aus:</p>
<pre><code>class A: public B {
public:
        bool X(); // defined but not implemented in A.cpp
	void Y(){Z();}

	void Z(){X();}
};
</code></pre>
<p>B wurde von mir erstellt:</p>
<pre><code>class B : public SuperKlasse {
public:
};
</code></pre>
<p>Wie man sieht, fehlt eine Implementierung für A::X(). Nun habe ich aber durch den Generator nicht nur ein A bekommen, sondern viele A's. Diesen fehlt allen eine Implementierung von X(). Die ist aber überall die gleiche. Kann man nun die Vererbung irgendwie austricksen, so dass ich X() schon in B definieren kann? Vermutlich nicht, da X() schon in A definiert ist, oder?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450134</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 14 Apr 2015 08:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 08:31:25 GMT]]></title><description><![CDATA[<p>Ich weiß, Vererbung austricksen ist ein wenig unsauber formuliert. Ich vermute, dadurch, dass X() in A definiert ist, ist bereits so eine &quot;Art vtable Eintrag&quot; für den Linker vorhanden und daher auch der Fehler. Müsste man halt irgendwie löschen können ... mh.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450135</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 14 Apr 2015 08:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 08:39:13 GMT]]></title><description><![CDATA[<p>Deine Beschreibung ist ziemlich wirr.<br />
Vielleicht meinst du eine rein virtuelle Methode:</p>
<pre><code>virtual X() = 0;
</code></pre>
<p>, denn die kannst du dann in A ueberschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450137</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Tue, 14 Apr 2015 08:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 08:46:33 GMT]]></title><description><![CDATA[<p>Dies müßte gehen:</p>
<pre><code class="language-cpp">class B
{
  virtual bool X()
  {
    return true; // or whatever
  }
}
</code></pre>
<p>Also einfach X als virtuelle Funktion in B definieren (und implementieren).<br />
Die Neudeklaration in der A-Klasse (bzw. den verschiedenen A-Klassen) dürfte dann dem Compiler nicht stören.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23821">@Marthog</a>: sven_ meint es umgekehrt <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>
<p>PS: Was ist denn das für ein Generator, der fehlerhaften Code (oder doch gewollt?!) erzeugt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450138</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 14 Apr 2015 08:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 09:39:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>fandet ihr meine Beschreibung wirr? Dachte eigentlich ist straight forward. Der Code stammt aus einem Testframework Generator, welcher auf Google Test aufbaut.</p>
<p>Den Ansatz mit einem: virtuel bool X(){return true; } in B habe ich auch probiert. Der Compiler (gcc477 mit C++11) nimmt es, aber der Linker sagt:</p>
<pre><code>main.cc:19: undefined reference to `vtable for A'
collect2: error: ld returned 1 exit status
</code></pre>
<p>Meine main ist dabei einfach nur:</p>
<pre><code>int
main(int argc, char** argv) {
    A a; //&lt;&lt;-- line 19
    return 0;
}
</code></pre>
<p>Klar kann ich auch in A jedes mal die Dekleration von X() auskommentieren, wenn man aber zig As hat, ist das nicht so ne coole Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450143</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 14 Apr 2015 09:39:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 11:11:14 GMT]]></title><description><![CDATA[<p>Wenn du</p>
<p>B.h</p>
<pre><code>virtual bool X(){return true; }
</code></pre>
<p>machst und A sich nicht anders verhalten soll als B, musst du natürlich die Deklaration von X() aus deiner Klasse A entfernen.<br />
Ansonsten musst du für deine Klasse A, die Methode X() überschreiben ... und da gehört halt zu einer Deklaration auch eine Definition.</p>
<pre><code>class A: public B {
public:
    bool X() 
    { 
      // Method definition
      // do sth. different like returning false
      return false; 
    }  
    void Y(){Z();}

    void Z(){X();}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2450149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450149</guid><dc:creator><![CDATA[Überschreiber]]></dc:creator><pubDate>Tue, 14 Apr 2015 11:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 11:45:48 GMT]]></title><description><![CDATA[<p>ja, dass hab ich mir schon gedacht. dachte es gibt so bissl was &quot;magisches&quot; wie man ihn dazu bringen kann die deklaration zu ignorieren. wollte auch nur sicher gehen, dass meine gedanken gänge stimmen. vielen dank. <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/2450150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450150</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 14 Apr 2015 11:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 12:21:59 GMT]]></title><description><![CDATA[<p>Es gibt auch die Möglichkeit eine rein virtuelle Methode in der Basisklasse zu definieren, und dort auch eine Implementierung mitzugeben. Auf die könntest du dann zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450151</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 14 Apr 2015 12:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Vererbung austricksen? on Tue, 14 Apr 2015 16:04:35 GMT]]></title><description><![CDATA[<p>Es gibt da zwei Moeglichkeiten. Du kannst vor die Deklaration ein // haengen oder du umschliesst die Deklaration mit /* und */. Dann wird alles schoen ignoriert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450172</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Tue, 14 Apr 2015 16:04:35 GMT</pubDate></item></channel></rss>