<?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[Wozu virtuelle Funktionen ??]]></title><description><![CDATA[<p>Habe mal eine Verständnisfrage und zwar wozu sind virtuelle Funktionen gut ?</p>
<p>mein Compiler nimmt auch dieses an:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class Saeugetier<br />
{<br />
public:<br />
Saeugetier(){};<br />
~Saeugetier(){};<br />
void GetLaut();<br />
};</p>
<p>void Saeugetier::GetLaut()<br />
{<br />
cout &lt;&lt; &quot;Ich bin ein Saeugetier !&quot; &lt;&lt; endl;<br />
}</p>
<p>class Hund : Saeugetier<br />
{<br />
public:<br />
Hund(){};<br />
~Hund(){};<br />
void GetLaut();<br />
};</p>
<p>void Hund::GetLaut()<br />
{<br />
cout &lt;&lt; &quot;Ich bin ein Hund !&quot; &lt;&lt; endl;<br />
}</p>
<p>int main() {<br />
Hund Rudi;<br />
Rudi.GetLaut();<br />
return 0;<br />
}</p>
<p>und zeigt bei Ausführung &quot;ICh bin ein Hund !&quot; an.</p>
<p>Hoffe mir kann das jemand erklären aus den Büchern kann ich das net so richtig entnehmen .. Danke schonmal</p>
<p>Gruß Mikes11</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195958/wozu-virtuelle-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 05:47:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195958.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Oct 2007 22:31:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Tue, 23 Oct 2007 22:31:31 GMT]]></title><description><![CDATA[<p>Habe mal eine Verständnisfrage und zwar wozu sind virtuelle Funktionen gut ?</p>
<p>mein Compiler nimmt auch dieses an:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class Saeugetier<br />
{<br />
public:<br />
Saeugetier(){};<br />
~Saeugetier(){};<br />
void GetLaut();<br />
};</p>
<p>void Saeugetier::GetLaut()<br />
{<br />
cout &lt;&lt; &quot;Ich bin ein Saeugetier !&quot; &lt;&lt; endl;<br />
}</p>
<p>class Hund : Saeugetier<br />
{<br />
public:<br />
Hund(){};<br />
~Hund(){};<br />
void GetLaut();<br />
};</p>
<p>void Hund::GetLaut()<br />
{<br />
cout &lt;&lt; &quot;Ich bin ein Hund !&quot; &lt;&lt; endl;<br />
}</p>
<p>int main() {<br />
Hund Rudi;<br />
Rudi.GetLaut();<br />
return 0;<br />
}</p>
<p>und zeigt bei Ausführung &quot;ICh bin ein Hund !&quot; an.</p>
<p>Hoffe mir kann das jemand erklären aus den Büchern kann ich das net so richtig entnehmen .. Danke schonmal</p>
<p>Gruß Mikes11</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390901</guid><dc:creator><![CDATA[Mikes11]]></dc:creator><pubDate>Tue, 23 Oct 2007 22:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Tue, 23 Oct 2007 22:44:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main() {
    Saeugetier* Rudi = new Hund();
    Rudi-&gt;GetLaut();
    return 0;
}
</code></pre>
<p>Na, was kommt jetzt für eine Ausgabe? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Nützlich ist das, wenn du z.B. eine Funktion hast, die einen Zeiger auf irgendein Säugetier übergeben bekommt und die GetLaut()-Funktion aufruft. Ohne virtuelle Funktionen und/oder Zeiger müsstest du diese Funktion für jeden möglichen Parameter (Hund/Katze/Maus/...) überladen, was ätzend werden könnte <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/1390903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390903</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 23 Oct 2007 22:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Tue, 23 Oct 2007 22:58:42 GMT]]></title><description><![CDATA[<p>Also ist das z.b. für sowas gut wenn ich z.b. den Benutzer Frage welches Tier er haben möchte....<br />
dann kann ich vorher einen Zeiger Saeugetier * pTier; festlegen,</p>
<p>danach die Benutzerangabe abfragen und je nachmdem dann so ein tier &quot;kreieren lassen &quot;</p>
<p>switch (welchesTier)<br />
{<br />
case 1: pTier = new Hund;<br />
break;<br />
case 2: ......<br />
....<br />
}</p>
<p>und dann so das richtige ausgeben lassen:</p>
<p>pTier.GetLaut();</p>
<p>richtig ? (grob vereinfacht vom code her jetzt....)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390907</guid><dc:creator><![CDATA[Mikes11]]></dc:creator><pubDate>Tue, 23 Oct 2007 22:58:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Tue, 23 Oct 2007 23:22:05 GMT]]></title><description><![CDATA[<p>Jap, richtig, das wäre ein Beispiel!</p>
<p>Eine andere Möglichkeit wäre, wenn du verschiedene Säugetiere in einem Array speichern möchtest. Z.B. so (auch vereinfach):</p>
<pre><code class="language-cpp">Saeugetier* meine_kleine_farm[4];
meine_kleine_farm[0] = new Schwein();
meine_kleine_farm[1] = new Hund();
meine_kleine_farm[2] = new Katze();
meine_kleine_farm[3] = new Pferd();

for ( int i=0; i&lt;4; i++ )
    meine_kleine_farm[i]-&gt;GibLaut();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1390908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390908</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 23 Oct 2007 23:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Wed, 24 Oct 2007 04:30:45 GMT]]></title><description><![CDATA[<blockquote>
<p>meine_kleine_farm</p>
</blockquote>
<p>Gute Nacht, John Boy!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390916</guid><dc:creator><![CDATA[KennerDerFarm]]></dc:creator><pubDate>Wed, 24 Oct 2007 04:30:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Wed, 24 Oct 2007 07:00:08 GMT]]></title><description><![CDATA[<p>das hilft auch bei der klassenhirarchie,<br />
du kannst es so einrichten das die klassen zwar nur hirarchich deklariert werden,<br />
also klasse 1 kennt klasse 2 kennt klasse 3 aber nicht umgekehrt ....<br />
wenn du aber eine basisklasse mit ein paar methoden zum informationsaustausch z.B. schreibst und<br />
die methoden vernünftig überschreibst kann klasse 3 methoden von klasse 1 aufrufen ohne ihren header explizit einbinden zu müssen (wenn das nicht mit forward declarations geschieht, gibs krach wegen kreuz referenzen)<br />
Wenn klasse 3 einen pointer vom typ der basisklasse der klasse 1 hat passiert das nict, weil die basisklasse den header der klasse 3 nicht kennt .... hmmmm ich dacht man könnt es ohne tiere einfacher ausdrücken &gt;_&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1390958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1390958</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 24 Oct 2007 07:00:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wozu virtuelle Funktionen ?? on Wed, 24 Oct 2007 17:34:50 GMT]]></title><description><![CDATA[<p>hui jetzt wirds wieder kompliziert g</p>
<p>Vielen Dank für eure schnellen und guten Antworten <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/1391397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391397</guid><dc:creator><![CDATA[Mikes11]]></dc:creator><pubDate>Wed, 24 Oct 2007 17:34:50 GMT</pubDate></item></channel></rss>