<?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[Wie kommt die Ausgabe zustande?]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe hier gerade eine Interessante Aufgabe gefunden. Jedoch verstehe ich nicht genau, wie die Ausgabe zustande kommt.<br />
Wäre nett, wenn mir jemand vielleicht einen kleinen Ablauf des Programms sagen könnte.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

// virtBasis.cpp

class Basis
{
protected:
	string str;
public:
	Basis(){ }
	Basis( string s )
		:str(s)
	{ }
};

class A : virtual public Basis
{
public:
	A( string s )
		: Basis( s )
	{ }
};

class B : virtual public Basis
{
public:
	B( string s)
		: Basis( s )
	{ }
};

class AB : public A, public B
{
public:
	AB( string s )							//
		: A ( s ), B ( s ), Basis ( s )		//	*
	{ }										//

	//AB( string s )							//
	//	: A ( s ), B ( s )						//	**
	//{ }										//

	void zeigWatt()
	{
		cout &lt;&lt; str &lt;&lt; endl;
	}
};

void main()
{
	AB ab(&quot;Idefix&quot;);
	ab.zeigWatt();
}

//////////////////////////
//		Ausgabe *		//
//		&quot;Idefix&quot;        //
//					    //
//		Ausgabe **		//
//		leerer string	//
//////////////////////////
</code></pre>
<p>Mfg</p>
<p>Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232527/wie-kommt-die-ausgabe-zustande</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:37:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232527.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Jan 2009 17:54:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie kommt die Ausgabe zustande? on Fri, 23 Jan 2009 17:54:38 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe hier gerade eine Interessante Aufgabe gefunden. Jedoch verstehe ich nicht genau, wie die Ausgabe zustande kommt.<br />
Wäre nett, wenn mir jemand vielleicht einen kleinen Ablauf des Programms sagen könnte.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

// virtBasis.cpp

class Basis
{
protected:
	string str;
public:
	Basis(){ }
	Basis( string s )
		:str(s)
	{ }
};

class A : virtual public Basis
{
public:
	A( string s )
		: Basis( s )
	{ }
};

class B : virtual public Basis
{
public:
	B( string s)
		: Basis( s )
	{ }
};

class AB : public A, public B
{
public:
	AB( string s )							//
		: A ( s ), B ( s ), Basis ( s )		//	*
	{ }										//

	//AB( string s )							//
	//	: A ( s ), B ( s )						//	**
	//{ }										//

	void zeigWatt()
	{
		cout &lt;&lt; str &lt;&lt; endl;
	}
};

void main()
{
	AB ab(&quot;Idefix&quot;);
	ab.zeigWatt();
}

//////////////////////////
//		Ausgabe *		//
//		&quot;Idefix&quot;        //
//					    //
//		Ausgabe **		//
//		leerer string	//
//////////////////////////
</code></pre>
<p>Mfg</p>
<p>Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651050</guid><dc:creator><![CDATA[DennisM]]></dc:creator><pubDate>Fri, 23 Jan 2009 17:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kommt die Ausgabe zustande? on Fri, 23 Jan 2009 18:55:36 GMT]]></title><description><![CDATA[<p>DennisM schrieb:</p>
<blockquote>
<p>Hallo.<br />
Ich habe hier gerade eine Interessante Aufgabe gefunden.</p>
</blockquote>
<p>So interessant ist sie nun auch wieder 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>
<p>Damit es nicht zum mehrfachen Aufruf des Basisklassen-Konstruktors kommt ist bei der virtuellen Vererbung die am meisten abgeleitete Klasse für die Initialisierung der Basisklasse zuständig.</p>
<p>Bei dir ist das die Klasse AB. D.h. wenn du ein Objekt von AB erzeugst werden die Basisklasseninitialisierungen von A bzw. B nicht aufgerufen. Nur AB initialisiert die Basisklasse Basis.</p>
<pre><code class="language-cpp">AB( string s )                            //
        : A ( s ), B ( s ), Basis ( s )        //    *
    { }                                        //
</code></pre>
<p>Hier initialisierst du die Basisklasse mit &quot;Idefix&quot;</p>
<pre><code class="language-cpp">//AB( string s )                            //
    //    : A ( s ), B ( s )                        //    **
    //{ }
</code></pre>
<p>Hier lässt du die Initialisierung der Basisklasse weg, was zum Aufruf des Standardkonstruktors der Basisklasse führt und somit zu einem leeren String.</p>
<p>Du kannst z.B. im Standardkonstruktor der Basisklasse str etwas zuweisen, dann siehst du es mit eigenen Augen. <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/1651095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651095</guid><dc:creator><![CDATA[Kritiker]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kommt die Ausgabe zustande? on Sat, 24 Jan 2009 14:00:12 GMT]]></title><description><![CDATA[<p>Ok, stimmt, interessant ist sie dann doch nicht, eher unspektakulär <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>Aber vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651415</guid><dc:creator><![CDATA[DennisM]]></dc:creator><pubDate>Sat, 24 Jan 2009 14:00:12 GMT</pubDate></item></channel></rss>