<?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[Problem bei Vererbung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein etwas schwierig zu erklärendes Problem... na ja ich versuchs einfach mal <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>ich habe eine abstrakte Klasse(nenne sie jetzt mal Mama) und 2 Klassen die von ihr erben (nenne sie jetzt mal Sohn und Tochter). In Mama habe ich eine abstrakte Methode(ausgabe()) die sowohl in Sohn als auch Tochte neu programmiert werden soll.</p>
<p>Das Ganze wird dann in meinem Hauptprogramm aufgerufen, indem ich ein Objekt Mama erzeuge und ihm je nach Benutzereingabe Sohn oder Tochter zuweise, also:</p>
<pre><code class="language-cpp">Mama* dieMama();
if(eingabe == 1) dieMama = new Sohn();
else dieMama = new Tochter();

cout &lt;&lt; dieMama-&gt;ausgabe();
cout &lt;&lt; dieMama-&gt;ausgabe();
</code></pre>
<p>--&gt;soweit, so gut, das passt alles. In ausgabe() möchte ich nun aber je nach Sohn oder Tochter verschiedene Objekte nutzen, die bei der Ausgabe auch noch bekannt sein müssen. Mein Problem ist nun, dass ich diese Objekte ja eigentlich im Header dieser Unterklassen anlegen müsste, ich abe rdie Informationen darin theoretisch verliere, wenn ich Sohn oder Tochter dem Mama-Objekt zuweise...</p>
<p>versteht ihr mein Problem? (Bin mir grad nicht sicher ob ichs verstehen würde, wenn ich das hier lesen würde...^^)</p>
<p>Habt ihr einen Lösungsvorschlag?</p>
<p>Ganz liebe Grüße<br />
Laura</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296235/problem-bei-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 02:49:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296235.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Nov 2011 13:59:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 13:59:01 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe ein etwas schwierig zu erklärendes Problem... na ja ich versuchs einfach mal <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>ich habe eine abstrakte Klasse(nenne sie jetzt mal Mama) und 2 Klassen die von ihr erben (nenne sie jetzt mal Sohn und Tochter). In Mama habe ich eine abstrakte Methode(ausgabe()) die sowohl in Sohn als auch Tochte neu programmiert werden soll.</p>
<p>Das Ganze wird dann in meinem Hauptprogramm aufgerufen, indem ich ein Objekt Mama erzeuge und ihm je nach Benutzereingabe Sohn oder Tochter zuweise, also:</p>
<pre><code class="language-cpp">Mama* dieMama();
if(eingabe == 1) dieMama = new Sohn();
else dieMama = new Tochter();

cout &lt;&lt; dieMama-&gt;ausgabe();
cout &lt;&lt; dieMama-&gt;ausgabe();
</code></pre>
<p>--&gt;soweit, so gut, das passt alles. In ausgabe() möchte ich nun aber je nach Sohn oder Tochter verschiedene Objekte nutzen, die bei der Ausgabe auch noch bekannt sein müssen. Mein Problem ist nun, dass ich diese Objekte ja eigentlich im Header dieser Unterklassen anlegen müsste, ich abe rdie Informationen darin theoretisch verliere, wenn ich Sohn oder Tochter dem Mama-Objekt zuweise...</p>
<p>versteht ihr mein Problem? (Bin mir grad nicht sicher ob ichs verstehen würde, wenn ich das hier lesen würde...^^)</p>
<p>Habt ihr einen Lösungsvorschlag?</p>
<p>Ganz liebe Grüße<br />
Laura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151044</guid><dc:creator><![CDATA[Laura89]]></dc:creator><pubDate>Wed, 30 Nov 2011 13:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:04:23 GMT]]></title><description><![CDATA[<p>sprich du willst sowas?!</p>
<pre><code class="language-cpp">cout &lt;&lt; dieMama-&gt;ausgabe(fooObjekt);
cout &lt;&lt; dieMama-&gt;ausgabe(barObjekt);
</code></pre>
<p>wenn ja, und du die möglichkeit hast sie zu editieren, dann lass sie von einer klasse erben, welche du als parameter erwartest</p>
<pre><code class="language-cpp">class Interface {};

class Foo : public Interface {};
class Bar : public Interface {};

class Mama {
    virtual void ausgabe(Interface const&amp;) = 0;
};
</code></pre>
<p>oder du setzt templates ein, oder du nutzt boost any als kapselung für deinen parameter...</p>
<p>edit: wobei, ich bin mir nicht sicher ob ich dein problem verstanden habe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151046</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:19:18 GMT]]></title><description><![CDATA[<p>danke schon mal <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>
<p>aber ich glaube, das war nicht ganz das, was ich suche, ich versuche es noch einmal:</p>
<p>in der Klasse Sohn bräuchte ich ein Objekt vom Typ K1, in Tochter vom Typ K2. K1 und K2 haben nichts miteinander zu tun. Ich würde diese beiden Objekte aber gerne erst in der Klasse selbst erschaffen, da ich sie sonst niergends brauche...</p>
<p>Liebe Grüße<br />
Laura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151055</guid><dc:creator><![CDATA[Laura89]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:21:18 GMT]]></title><description><![CDATA[<p>Ps.: und ich kann sie auch nicht in der Methode erschaffen, da die Objekte erhalten bleiben sollen, also beim 2.Aufruf von Ausgabe möglciherweise etwas anderes passiert als beim ersten, weil das Objekt verändert wurde</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151057</guid><dc:creator><![CDATA[Laura89]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:54:09 GMT]]></title><description><![CDATA[<p>ja dann erstell sie dir doch als membervariablen...</p>
<pre><code class="language-cpp">class Sohn : public Mama {
    Foo m_foo;
};

class Tochter : public Mama {
    Bar m_bar;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2151077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151077</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:55:53 GMT]]></title><description><![CDATA[<p>Sowas ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class K1 {
	public:
		int x;
};

class K2 {
	public:
		int y;
};

class Mama {
	public:
		virtual void ausgabe() = 0;
};

class Sohn: public Mama {
	protected:
		K1 o;
	public:
		Sohn() {o.x=1;}
		void ausgabe() { cout&lt;&lt;o.x&lt;&lt;endl; o.x++; }
};

class Tochter: public Mama {
	protected:
		K2 o;
	public:
		Tochter() {o.y=4;}
		void ausgabe() { cout&lt;&lt;o.y&lt;&lt;endl; o.y++; }
};

int main(int, char**) {
	Mama *m;
	m=new Tochter;
	m-&gt;ausgabe();
	delete m;
}
</code></pre>
<p>Ich weiß, das Beispiel ist nicht besonders sinvoll -.-</p>
<p>EDIT: Sky war schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151078</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 14:58:14 GMT]]></title><description><![CDATA[<p>Genau so was <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>
<p>aber geht das? Gehen die variablen x und y nicht bei der Zuweisung:</p>
<p>m=new Tochter();</p>
<p>verloren? Weil m hat doch eigentlich gar keinen Speicherplatz für x und y, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151081</guid><dc:creator><![CDATA[Laura89]]></dc:creator><pubDate>Wed, 30 Nov 2011 14:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 15:20:08 GMT]]></title><description><![CDATA[<p>Deswegen nutzt du ja einen Pointer. Pointer sind immer gleich groß, den Speicher für die eigentliche Variable reservierst du mit new.<br />
Damit bei delete auch alles wieder gelöscht wird, brauchst du allerdings noch einen virtuellen Destruktor. (In Mama) (Und die Membervariablen protected zu machen hat hier irgendwie auch keinen Sinn.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151097</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 30 Nov 2011 15:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 15:32:30 GMT]]></title><description><![CDATA[<p>im prinzip ist dein denkansatz gar nciht so verkehrt. du kannst über m nicht direkt die variabeln ansprechen, außer du castest m zu class sohn oder tochter (natürlich mit nachträglich valitäts prüfung). m ist ja NUR ein zeiger, das object erstellst du mit new Object(), und da wird auch der speicher reserviert. m zeigt also nur auf ihm bekannte objecte der class.</p>
<p>hoffe, ist verständlich, was ich meine <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/2151107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151107</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Wed, 30 Nov 2011 15:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 15:38:57 GMT]]></title><description><![CDATA[<p>Klingt nicht gut. Polymorphismus und virtuelle Methoden dienen dazu, eine Schnittstelle zu definieren, über die abgeleitete Klassen angesprochen werden können ( <code>ausgabe()</code> in deinem Fall). Du möchtest das jetzt aber wieder aufbrechen und damit sind <code>Sohn::ausgabe( const Foo&amp; )</code> und <code>Tochter::ausgabe( const Bar&amp; )</code> zwei völlig unterschiedliche Methoden, die nicht über ein gemeinsames Interface angesprochen werden können.</p>
<p>Edit: OMG, Jahre zu spät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151110</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 30 Nov 2011 15:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Vererbung on Wed, 30 Nov 2011 15:39:51 GMT]]></title><description><![CDATA[<p>danke euch allen <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>
<p>Jetzt hab ichs begriffen <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/2151112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151112</guid><dc:creator><![CDATA[Laura89]]></dc:creator><pubDate>Wed, 30 Nov 2011 15:39:51 GMT</pubDate></item></channel></rss>