<?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[Warum wird der Konstruktor nicht vererbt?]]></title><description><![CDATA[<p>hallo,<br />
warum wird der konstruktor nicht, ebenso wie andere methoden auch, vererbt?</p>
<pre><code class="language-cpp">class foo
{
public:
	foo(int a) : m_a(a) {}

protected:
	int m_a;
};

class bar : public foo {};
</code></pre>
<p>bar bekommt nicht den konstruktor von foo. warum muss man extra explizit schreiben:</p>
<pre><code class="language-cpp">bar(int a) : foo(a) {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/160345/warum-wird-der-konstruktor-nicht-vererbt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:04:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160345.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Sep 2006 07:07:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 07:07:49 GMT]]></title><description><![CDATA[<p>hallo,<br />
warum wird der konstruktor nicht, ebenso wie andere methoden auch, vererbt?</p>
<pre><code class="language-cpp">class foo
{
public:
	foo(int a) : m_a(a) {}

protected:
	int m_a;
};

class bar : public foo {};
</code></pre>
<p>bar bekommt nicht den konstruktor von foo. warum muss man extra explizit schreiben:</p>
<pre><code class="language-cpp">bar(int a) : foo(a) {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1143745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143745</guid><dc:creator><![CDATA[konstruktör]]></dc:creator><pubDate>Mon, 25 Sep 2006 07:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 07:17:27 GMT]]></title><description><![CDATA[<p>Weil die abgeleitete Klasse nicht zwangsläufig auf die gleiche Art konstruiert werden soll wie die Basisklasse. D.h. du musst den entsprechenden Konstruktor einfach explizit aufrufen.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1143750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143750</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 25 Sep 2006 07:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 07:45:00 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Weil die abgeleitete Klasse nicht zwangsläufig auf die gleiche Art konstruiert werden soll wie die Basisklasse.</p>
</blockquote>
<p>Zwangsläufig wäre blöd, aber default-mäßig wäre doch nicht schlecht; es sei denn, man hätte dann keine Möglichkeit, den Basisklassen-Konstruktor zu verbieten. Wenn man die Schnittstelle für den Basisklassen-Konstruktor verstecken wollte, könnte man sie aber private machen. Ich verstehe das nicht, meistens ist es doch beim Ableiten eher so, dass man die Dinge, die man nicht neu aufführt, behalten will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1143772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143772</guid><dc:creator><![CDATA[konstruktör]]></dc:creator><pubDate>Mon, 25 Sep 2006 07:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 10:57:24 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Weil die abgeleitete Klasse nicht zwangsläufig auf die gleiche Art konstruiert werden soll wie die Basisklasse. D.h. du musst den entsprechenden Konstruktor einfach explizit aufrufen.</p>
<p>grüße</p>
</blockquote>
<p>Ich finde die Frage schon ganz interessant. Immerhin ist es bei jeder anderen (non-private &amp; non-pure-virtual) Methode auch so, dass sie &quot;automatisch da ist&quot;, solange man sie nicht absichtlich versteckt oder überschreibt....<br />
Da müsste das Argument eigentlich genauso gelten.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1143942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143942</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 25 Sep 2006 10:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 11:18:24 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich finde die Frage schon ganz interessant. Immerhin ist es bei jeder anderen (non-private &amp; non-pure-virtual) Methode auch so, dass sie &quot;automatisch da ist&quot;, solange man sie nicht absichtlich versteckt oder überschreibt....</p>
</blockquote>
<p>Okay, also nehmen wir an der Konstruktor von foo würde an bar vererbt. Dann hätte die Klasse bar einen Konstruktor foo::bar(int). Ein Konstruktor muss aber immer so heissen wie die Klasse die er konstruiert.</p>
<p>Oder, wir nehmen an der Konstruktor von foo würde an bar vererbt. Die Klasse bar hat mehrere non-triviale Member. Da wir aber den Konstruktor foo(int) von der Basis <strong>geerbt</strong> haben werden diese nicht konstruiert und hängen undefiniert herum.</p>
<p>Mir würden sicher noch einige weitere Gründe einfallen, warum man Konstruktoren (genausowenig wie Destruktoren) nicht erben können sollte, aber mir reicht schon der zweite <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>EDIT:<br />
Die verflixten Wortfindungsstörungen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1143957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143957</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 25 Sep 2006 11:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 11:19:07 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich finde die Frage schon ganz interessant. Immerhin ist es bei jeder anderen (non-private &amp; non-pure-virtual) Methode auch so, dass sie &quot;automatisch da ist&quot;, solange man sie nicht absichtlich versteckt oder überschreibt....</p>
</blockquote>
<p>Okay, also nehmen wir an der Konstruktor von foo würde an bar vererbt. Dann hätte die Klasse bar einen Konstruktor foo::bar(int). Ein Konstruktor muss aber immer so heissen wie die Klasse die er konstruiert.</p>
<p>Oder, wir nehmen an der Konstruktor von foo würde an bar vererbt. Die Klasse bar hat mehrere non-triviale Member. Da wir aber den Konstruktor foo(int) von der Basis <strong>geerbt</strong> haben werden diese nicht konstruiert und hängen undefiniert herum.</p>
<p>Mir würden sicher noch einige weitere Gründe einfallen, warum man Konstruktoren (genausowenig wie Destruktoren) nicht erben können sollte, aber mir reicht schon der zweite <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>EDIT:<br />
Die verflixten Wortfindungsstörungen...</p>
</blockquote>
<p>Noch schlimmer: Konstruktoren haben nichtmal Namen! <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/1143961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1143961</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 25 Sep 2006 11:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 12:38:34 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Dann hätte die Klasse bar einen Konstruktor foo::bar(int). Ein Konstruktor muss aber immer so heissen wie die Klasse die er konstruiert.</p>
<p>Oder, wir nehmen an der Konstruktor von foo würde an bar vererbt. Die Klasse bar hat mehrere non-triviale Member. Da wir aber den Konstruktor foo(int) von der Basis <strong>geerbt</strong> haben werden diese nicht konstruiert und hängen undefiniert herum.</p>
</blockquote>
<p>Stimmt. Der Default-Konstruktor-Mechanismus müsste intelligenter sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144032</guid><dc:creator><![CDATA[konstruktör]]></dc:creator><pubDate>Mon, 25 Sep 2006 12:38:34 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 13:41:00 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...Ein Konstruktor muss aber immer so heissen wie die Klasse die er konstruiert....</p>
</blockquote>
<p>Naja, dass es sich um einen Konstruktor handelt, kann dem Compiler durchaus bewusst sein, so dass er sich um diese Konsistenz selbst kümmern kann.<br />
erst Recht, wenn gelten soll</p>
<p>David_pb schrieb:</p>
<blockquote>
<p>...Noch schlimmer: Konstruktoren haben nichtmal Namen! <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>Das zweite Argument gilt für jede &quot;non-const-Funktion&quot; ebenso. Natürlich ist der Programmierer der abgeleiteten Klasse für die Datenkonsistenz immer verantwortlich (weswegen man sehr gut überlegen sollte, ob man Funktionen überschreiben muß oder nicht).<br />
Wie gesagt: Ich habe kein konkretes Problem damit, aber so recht zwingend erscheint es mir (bislang) nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144080</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 25 Sep 2006 13:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 13:43:20 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Wie gesagt: Ich habe kein konkretes Problem damit, aber so recht zwingend erscheint es mir (bislang) nicht.</p>
</blockquote>
<p>Zu dem zweiten von mir genannten Grund hast Du Dich nicht geäußert. IMHO macht es das sehr zwingend. Eine andere Sache wäre es wenn der Compiler einen Konstruktor generiert der einen Parameter hat und den Basisklassenkonstruktor mit einem Parameter implizit aufruft. Das hat dann aber nichts mehr mit erben zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144083</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 25 Sep 2006 13:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 14:11:32 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...<br />
Zu dem zweiten von mir genannten Grund hast Du Dich nicht geäußert...</p>
</blockquote>
<p>Hmmm, ich dachte, das hätte ich. Vielleicht hatte ich auch Dein Argument mißverstanden.</p>
<p>Nun gut, nächster Versuch:<br />
Die Situation, dass &quot;zusätzliche Attribute&quot; nicht sauber initialisiert werden, taucht auch ohne &quot;Konstruktorvererbung&quot; auf.</p>
<pre><code class="language-cpp">class A {
string a, b;
public:
    A(string const&amp; s): a(s) {} // ganz ohne Vererbung habe ich b vergessen
    void init() { a=&quot;Jaxom&quot;; b=&quot;Simon&quot;; }
};

class B : public A {
string c;
public:
    B(string const&amp; s) : A(s) {} // Hier vergesse ich auch c
    // ... und wenn ich init() nicht &quot;override&quot; (wozu es eigentlich nicht da ist), auch dabei
};
</code></pre>
<p>Ergo: Durch eine &quot;Ctor-Vererbung&quot; hätte ich kein neues Problem geschaffen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144094</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 25 Sep 2006 14:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 14:16:59 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">A(string const&amp; s): a(s) {} // ganz ohne Vererbung habe ich b vergessen
</code></pre>
</blockquote>
<p>Hier wird für b der Standardkonstruktor von std::string aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144104</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 25 Sep 2006 14:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warum wird der Konstruktor nicht vererbt? on Mon, 25 Sep 2006 14:34:16 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">A(string const&amp; s): a(s) {} // ganz ohne Vererbung habe ich b vergessen
</code></pre>
</blockquote>
<p>Hier wird für b der Standardkonstruktor von std::string aufgerufen.</p>
</blockquote>
<p>Ahaaa !!! <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 />
Jetzt weiß ich, worauf Du hinauswillst - und sehe auch das Problem.<br />
Gut, da hätte man vermutlich was &quot;drumherumdefinieren&quot; können (so, dass auch in Fall eines &quot;geerbten Konstruktors&quot; für die neuen Elemente der StdCtor aufgefufen wird) .... aber ich sehe ein, dass sich niemand die Mühe macht, für diesen (vermutlich in 100% der Fälle ungewollten) Effekt so eine Sonderlocke zu definieren.<br />
Außerdem wäre damit der Standard auch nicht &quot;konsistenter&quot; geworden.</p>
<p>danke für die Aufklärung.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144121</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 25 Sep 2006 14:34:16 GMT</pubDate></item></channel></rss>