<?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[Frage zu Konstruktoren bei virtuellen Basisklassen]]></title><description><![CDATA[<pre><code class="language-cpp">class Basis
{
    private:
        Wert;
    public:
        Basis(int Wert)
        {
            Basis::Wert = Wert;
        };
};

class Abgeleitet1 : virtual public Basis
{
    public:
        Abgeleitet1(int Wert):Basis(Wert)
        {};
};

class Abgeleitet2 : public Abgeleitet1
{
    public:
        Abgeleitet2(int Wert):Abgeleitet1(Wert),Basis(Wert)
        {};
};
//-----------------------------------------------------------------

class Abgeleitet3 : public Abgeleitet1,Abgeleitet2
{
    public:
        Abgeleitet3(int Wert):Abgeleitet1(Wert),Abgeleitet2(Wert),Basis(Wert)
        {};
};
</code></pre>
<p>Meine Frage ist: Warum muss ich beim Konstruktor der Klasse <strong>Abgeleitet2</strong> auch dem Konstruktor von <strong>Basis</strong> Parameter übergeben? Bei <strong>Abgeleitet3</strong> ist mir das klar, da es dort Wert nur 1x geben soll und der Konstruktor von <strong>Basis</strong> somit nur 1x aufgerufen wird.<br />
Aber Warum ist das bei <strong>Abgeleitet 2</strong> nötig, dort besteht doch gar nicht die Möglichkeit,dass es <strong>Wert</strong> 2x gibt und der Konstruktor von <strong>Basis</strong> würde eh nur 1x aufgerufen werden (von <strong>Abgeleitet1</strong>).</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220834/frage-zu-konstruktoren-bei-virtuellen-basisklassen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 17:03:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220834.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Aug 2008 17:31:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Konstruktoren bei virtuellen Basisklassen on Thu, 21 Aug 2008 17:31:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Basis
{
    private:
        Wert;
    public:
        Basis(int Wert)
        {
            Basis::Wert = Wert;
        };
};

class Abgeleitet1 : virtual public Basis
{
    public:
        Abgeleitet1(int Wert):Basis(Wert)
        {};
};

class Abgeleitet2 : public Abgeleitet1
{
    public:
        Abgeleitet2(int Wert):Abgeleitet1(Wert),Basis(Wert)
        {};
};
//-----------------------------------------------------------------

class Abgeleitet3 : public Abgeleitet1,Abgeleitet2
{
    public:
        Abgeleitet3(int Wert):Abgeleitet1(Wert),Abgeleitet2(Wert),Basis(Wert)
        {};
};
</code></pre>
<p>Meine Frage ist: Warum muss ich beim Konstruktor der Klasse <strong>Abgeleitet2</strong> auch dem Konstruktor von <strong>Basis</strong> Parameter übergeben? Bei <strong>Abgeleitet3</strong> ist mir das klar, da es dort Wert nur 1x geben soll und der Konstruktor von <strong>Basis</strong> somit nur 1x aufgerufen wird.<br />
Aber Warum ist das bei <strong>Abgeleitet 2</strong> nötig, dort besteht doch gar nicht die Möglichkeit,dass es <strong>Wert</strong> 2x gibt und der Konstruktor von <strong>Basis</strong> würde eh nur 1x aufgerufen werden (von <strong>Abgeleitet1</strong>).</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569118</guid><dc:creator><![CDATA[Programmierer]]></dc:creator><pubDate>Thu, 21 Aug 2008 17:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Konstruktoren bei virtuellen Basisklassen on Fri, 22 Aug 2008 07:07:43 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Die am meisten abgeleitete Klasse initialisiert die virtuelle Basisklasse.</p>
<p>D.h. falls du ein Objekt der Klasse Abgeleitet2 erstellen willst ist Abgeleitet2 die am meisten abgeleitete Klasse und somit für die initialisierung von Basis verantwortlich. Der (explizite) Aufruf des Basis-Konstruktors innerhalb des Abgeleitet1-Konstruktors wird nicht ausgeführt.</p>
<p>Dasselbe gilt für Abgeleitet3-Objekte. Hier würden die Aufrufe des Basis-Konstruktors aus Abgeleitet1 und Abgeleitet2 auch nicht ausgeführt, sondern nur der Aufruf aus Abgeleitet3.</p>
<p>Gruß</p>
<p>P.S.: Hat dein Design einen bestimmten Grund? Sieht irgendwie &quot;seltsam&quot; aus. <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/1569329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569329</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Fri, 22 Aug 2008 07:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Konstruktoren bei virtuellen Basisklassen on Fri, 22 Aug 2008 07:15:50 GMT]]></title><description><![CDATA[<p>vic1986 schrieb:</p>
<blockquote>
<p>P.S.: Hat dein Design einen bestimmten Grund? Sieht irgendwie &quot;seltsam&quot; aus. <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 hat so ziemlich jedes Design mit virtuellen Basisklassen so an sich. Die tauchen halt meist nur dann auf wenn irgendwas &quot;seltsames&quot; modelliert wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569334</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 22 Aug 2008 07:15:50 GMT</pubDate></item></channel></rss>