<?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: Vererbung &amp;amp; Konstruktoren]]></title><description><![CDATA[<p>Moin, erstmal ich bin noch nicht so bewandert in C++ und ich hoffe ihr könnt mir Helfen wie sich die Konstruktoren bei Vererbung verhalten.</p>
<p>Hier erstmal ein Code-Schnipsel danach kommen die Fragen:</p>
<pre><code class="language-cpp">/** Von dieser Klasse wird geerbt */
class oberklasse
{ ...
    oberklasse (string param1, string param2) // Konstruktor
    {
        element = param1;
        anderesElement = param2;
    }
};

/** Von dieser Klasse wird auch geerbt */
class andereOberklasse
{ ...
    andereOberklasse (char param) // Konstruktor
    {
        einWeiteresElement = param;
    }
};

/** Und diese Klasse soll erben */
class unterKlasse : public oberklasse, public andereOberklasse
{ ...
    unterKlasse () {} // Default-Konstruktor, leer

    unterKlasse (int a, string b, string c, char d) : oberklasse(b, c), andereOberklasse(d) // Konstruktor
    { ... } // Hier steht nichts wichtiges
};
</code></pre>
<p>So ich habe jetzt oben eine simple Mehrfachvererbung. Jetzt kommen die Fragen:</p>
<p>1. Wenn ich jetzt ein Objekt von &quot;unterKlasse&quot; erzeuge mit dem Default-Konstruktor, welche Konstruktoren werden von den Oberklassen aufgerufen? Oder werden überhaupt welche aufgerufen?</p>
<p>2. Was passiert eigentlich genau wenn ich den Konstruktor von &quot;unterKlasse&quot; aufrufe. Vor allem in welcher Reihenfolge werden die Konstruktoren aufgerufen?</p>
<p>3. Was passiert wenn die Konstruktoren der Oberklassen als &quot;privat&quot; deklariert wurden (wenn das überhaupt geht)?</p>
<p>4. Zu guter letzt. Wenn jetzt das erzeugte Objekt &quot;gekillt&quot; wird, werden dann die Destruktoren der Oberklasse automatisch aufgerufen oder muss man diese selber aufrufen?</p>
<p>Ich hoffe die Fragen sind nicht zu umständlich und der Code ist richtig formatiert (Tabulator geht irgendwie nicht <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/topic/128698/anfängerfrage-vererbung-amp-konstruktoren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 21:00:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/128698.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Dec 2005 12:35:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:35:58 GMT]]></title><description><![CDATA[<p>Moin, erstmal ich bin noch nicht so bewandert in C++ und ich hoffe ihr könnt mir Helfen wie sich die Konstruktoren bei Vererbung verhalten.</p>
<p>Hier erstmal ein Code-Schnipsel danach kommen die Fragen:</p>
<pre><code class="language-cpp">/** Von dieser Klasse wird geerbt */
class oberklasse
{ ...
    oberklasse (string param1, string param2) // Konstruktor
    {
        element = param1;
        anderesElement = param2;
    }
};

/** Von dieser Klasse wird auch geerbt */
class andereOberklasse
{ ...
    andereOberklasse (char param) // Konstruktor
    {
        einWeiteresElement = param;
    }
};

/** Und diese Klasse soll erben */
class unterKlasse : public oberklasse, public andereOberklasse
{ ...
    unterKlasse () {} // Default-Konstruktor, leer

    unterKlasse (int a, string b, string c, char d) : oberklasse(b, c), andereOberklasse(d) // Konstruktor
    { ... } // Hier steht nichts wichtiges
};
</code></pre>
<p>So ich habe jetzt oben eine simple Mehrfachvererbung. Jetzt kommen die Fragen:</p>
<p>1. Wenn ich jetzt ein Objekt von &quot;unterKlasse&quot; erzeuge mit dem Default-Konstruktor, welche Konstruktoren werden von den Oberklassen aufgerufen? Oder werden überhaupt welche aufgerufen?</p>
<p>2. Was passiert eigentlich genau wenn ich den Konstruktor von &quot;unterKlasse&quot; aufrufe. Vor allem in welcher Reihenfolge werden die Konstruktoren aufgerufen?</p>
<p>3. Was passiert wenn die Konstruktoren der Oberklassen als &quot;privat&quot; deklariert wurden (wenn das überhaupt geht)?</p>
<p>4. Zu guter letzt. Wenn jetzt das erzeugte Objekt &quot;gekillt&quot; wird, werden dann die Destruktoren der Oberklasse automatisch aufgerufen oder muss man diese selber aufrufen?</p>
<p>Ich hoffe die Fragen sind nicht zu umständlich und der Code ist richtig formatiert (Tabulator geht irgendwie nicht <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/935669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935669</guid><dc:creator><![CDATA[Doktor Ruff]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:35:58 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:40:49 GMT]]></title><description><![CDATA[<p>Wenn du den Konstruktor der Elternklasse nicht explizit aufrust, versucht der Compiler den Standardkonstruktor zu benutzen. Da deine ELternklasse diesen nicht hat, wirst du einen Compilefehler bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/935672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935672</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:43:54 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>Wenn du den Konstruktor der Elternklasse nicht explizit aufrust, versucht der Compiler den Standardkonstruktor zu benutzen. Da deine ELternklasse diesen nicht hat, wirst du einen Compilefehler bekommen.</p>
</blockquote>
<p>Das beantwortet schonmal die erste Frage. Ich habe ja noch einen weiteren Konstruktor angegeben. Ruft dieser überhaupt die Konstruktoren der Oberklassen auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/935678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935678</guid><dc:creator><![CDATA[Doktor Ruff]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:44:41 GMT]]></title><description><![CDATA[<ol>
<li>
<p>Die Default-Konstruktoren der Oberklassen (wenn du keine definiert hast, stellt dir der Compiler welche zur Verfügung)</p>
</li>
<li>
<p>Erst werden Konstruktoren der virtuellen Oberklassen aufgerufen (hast du nicht), dann normale Oberklassen in der Reihenfolge wie sie genannt wurden, danach Membervariablen (auch in der Reihenfolge ihrer Nennung).</p>
</li>
<li>
<p>Dann sind sie für abgeleitete Klassen nicht erreichbar, also kannst du effektiv nichts von dieser Klasse ableiten (außer du deklarierst es als 'friend') bzw. damit anfangen.</p>
</li>
<li>
<p>Die werden automatisch aufgerufen - und zwar in der umgekehrten Reihenfolge zu den Konstruktoren (erst unterKlasse-Elemente von unten nach oben, dann andereOberklasse und zuletzt oberklasse).</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/935679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935679</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:45:02 GMT]]></title><description><![CDATA[<p>Doktor Ruff schrieb:</p>
<blockquote>
<p>1. Wenn ich jetzt ein Objekt von &quot;unterKlasse&quot; erzeuge mit dem Default-Konstruktor, welche Konstruktoren werden von den Oberklassen aufgerufen? Oder werden überhaupt welche aufgerufen?</p>
</blockquote>
<p>Wie mein Vorredner sagte, der Default-Konstruktor, wenn vorhanden, sonst Fehler.</p>
<blockquote>
<p>2. Was passiert eigentlich genau wenn ich den Konstruktor von &quot;unterKlasse&quot; aufrufe. Vor allem in welcher Reihenfolge werden die Konstruktoren aufgerufen?</p>
</blockquote>
<p>In der Reihenfolge der Ableitung (oberKlasse, andereOberklasse).</p>
<blockquote>
<p>3. Was passiert wenn die Konstruktoren der Oberklassen als &quot;privat&quot; deklariert wurden (wenn das überhaupt geht)?</p>
</blockquote>
<p>Fehler, da die unterKlasse nicht berechtigt ist seine Oberklassen zu konstruieren.</p>
<blockquote>
<p>4. Zu guter letzt. Wenn jetzt das erzeugte Objekt &quot;gekillt&quot; wird, werden dann die Destruktoren der Oberklasse automatisch aufgerufen oder muss man diese selber aufrufen?</p>
</blockquote>
<p>Destruktoren werden in umgekehrter Reihenfolge der Konstruktoren aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/935681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935681</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:45:56 GMT]]></title><description><![CDATA[<blockquote>
<p>2. Was passiert eigentlich genau wenn ich den Konstruktor von &quot;unterKlasse&quot; aufrufe. Vor allem in welcher Reihenfolge werden die Konstruktoren aufgerufen?</p>
</blockquote>
<p>Objekte werden von &quot;innen&quot; nach &quot;außen&quot; konstruiert, d.h. erst die Oberklasse, dann die abgeleiteten Klassen.</p>
<blockquote>
<p>3. Was passiert wenn die Konstruktoren der Oberklassen als &quot;privat&quot; deklariert wurden (wenn das überhaupt geht)?</p>
</blockquote>
<p>Geht, wird aber Compiler-Fehler geben.</p>
<blockquote>
<p>4. Zu guter letzt. Wenn jetzt das erzeugte Objekt &quot;gekillt&quot; wird, werden dann die Destruktoren der Oberklasse automatisch aufgerufen oder muss man diese selber aufrufen?</p>
</blockquote>
<p>Werden automatisch aufgerufen.</p>
<blockquote>
<p>Das beantwortet schonmal die erste Frage. Ich habe ja noch einen weiteren Konstruktor angegeben. Ruft dieser überhaupt die Konstruktoren der Oberklassen auf?</p>
</blockquote>
<p>Der Compiler ruft von sich aus nur Standardkonstruktoren auf, wenn du andere aufrufen möchtest, kannst du es, wie geschehen, über den Elementinitializer machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/935682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935682</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 12:55:40 GMT]]></title><description><![CDATA[<p>Gut mit so vielen Antworten habe ich nicht gerechnet <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="😉"
    /> ... vor allem so schnell.</p>
<p>Erstmal danke, das hat doch einiges zum Verständis beigetragen.</p>
<p>Aber ich hab da noch 2 Fragen:</p>
<p>1. Wenn ich jetzt keinen Default-Konstruktor definiere sondern nur einen anderen Konstruktor mit Parameter, schreibt mir der Compiler dann den Default-Konstruktor dazu oder existiert dann dieser überhaupt nicht?</p>
<p>2. Wenn die Konstruktoren der Unterklasse explizit keinen Konstruktor der Oberklasse aufrufen, werden dann die Default-Konstruktoren der Oberklasse aufgerufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/935693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935693</guid><dc:creator><![CDATA[Doktor Ruff]]></dc:creator><pubDate>Tue, 06 Dec 2005 12:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: Vererbung &amp;amp; Konstruktoren on Tue, 06 Dec 2005 13:41:49 GMT]]></title><description><![CDATA[<p>zu 1.<br />
Nur wenn du keinen Konstruktor definierst, stellt dir der Compiler einen Standardkonstruktor zur Verfügung. Sobald du selbst einen Konstruktor schreibst, wird keiner mehr vom Compiler zur Verfügung gestellt. Dann exisitiert also auch keiner, wenn du nicht selbst noch einen geschrieben hast.</p>
<p>zu 2.<br />
richtig, insofern diese existieren, ansonsten gibts ne Fehlermeldung <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/935724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/935724</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 06 Dec 2005 13:41:49 GMT</pubDate></item></channel></rss>