<?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 Virtuellen Funktionen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit virtuellen methoden in C++:</p>
<p>Ich habe eine Liste vom typ list&lt;Fahrzeuge&gt; p_ptFahrzeuge.<br />
In dieser liste möchte ich zeiger auf Objekte vom Typ Fahrzeug, PKW und Fahrrad speichern.<br />
PKW und Fahrrad sind von Fahrzeug abgeleitet.</p>
<p>Nun passiert folgendes:<br />
Wenn ich nun der Liste einen Zeiger vom Typ PKW hinzufüge, dann ist das Objekt danach vom Typ Fahrzeug.<br />
Nun habe ich aber in Fahrzeug eine Methode vAbfertigung als virtuell deklariert und in PKW sowie Fahrrad<br />
überschrieben. Leider kann ich die vAbfertigung von der Klasse PKW nicht mehr von einem Zeiger der Liste<br />
aufrufen, sondern nur die Methode in der Klasse Fahrzeug.</p>
<p>Es muss doch einen Weg geben, das in den Griff zu bekommen.</p>
<p>Vielen Dank für alle Antworten</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178846/frage-zu-virtuellen-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 01:18:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178846.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Apr 2007 19:09:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Virtuellen Funktionen on Sun, 15 Apr 2007 19:09:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit virtuellen methoden in C++:</p>
<p>Ich habe eine Liste vom typ list&lt;Fahrzeuge&gt; p_ptFahrzeuge.<br />
In dieser liste möchte ich zeiger auf Objekte vom Typ Fahrzeug, PKW und Fahrrad speichern.<br />
PKW und Fahrrad sind von Fahrzeug abgeleitet.</p>
<p>Nun passiert folgendes:<br />
Wenn ich nun der Liste einen Zeiger vom Typ PKW hinzufüge, dann ist das Objekt danach vom Typ Fahrzeug.<br />
Nun habe ich aber in Fahrzeug eine Methode vAbfertigung als virtuell deklariert und in PKW sowie Fahrrad<br />
überschrieben. Leider kann ich die vAbfertigung von der Klasse PKW nicht mehr von einem Zeiger der Liste<br />
aufrufen, sondern nur die Methode in der Klasse Fahrzeug.</p>
<p>Es muss doch einen Weg geben, das in den Griff zu bekommen.</p>
<p>Vielen Dank für alle Antworten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266718</guid><dc:creator><![CDATA[Jinzuu]]></dc:creator><pubDate>Sun, 15 Apr 2007 19:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Virtuellen Funktionen on Sun, 15 Apr 2007 19:14:30 GMT]]></title><description><![CDATA[<p>Polymorphie löst das Problem von alleine - allerdings speicherst du in der Liste Fahrzeuge statt Zeiger auf Fahrzeuge. Polymorphie funktioniert aber nur mit Zeigern.</p>
<pre><code class="language-cpp">vector&lt;Fahrzeug*&gt; fzs;
fzs.push_back( new PKW() );

fzs[0]-&gt;doSmth(); // PKW.doSmth()

// deleten aller mit new im vector platzieren elemente nicht vergessen!
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266721</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 15 Apr 2007 19:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Virtuellen Funktionen on Sun, 15 Apr 2007 19:19:22 GMT]]></title><description><![CDATA[<p>entweder versteh ich dein problem falsch oder du verstehst nicht was virtuelle funktionen sind...es ist ja gerade der sinn von virtuellen funktionen, dass Fahrzeug-&gt;vAbfertigung() eben nicht Fahrzeug-&gt;vAbfertigung(), sonder PKW-&gt;vAbfertigung() etc., also eben &quot;das richtige&quot; macht...</p>
<p>EDIT:</p>
<p>ok hat ja schon wer beantwortet. das mit der liste hab ich übersehen...wie schon gesagt wurde, du musst mit zeigern oder referenzen arbeiten damit das geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266722</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 15 Apr 2007 19:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Virtuellen Funktionen on Sun, 15 Apr 2007 19:22:40 GMT]]></title><description><![CDATA[<p>Danke SideWinder. Das war der Grund. Es läuft einwandfrei.<br />
So ein Mist. Ein kleines Sternchen vergessen und 3 Stunden für blöde Fehlersuche draufgegangen.</p>
<p>Nochmals danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266730</guid><dc:creator><![CDATA[Jinzuu]]></dc:creator><pubDate>Sun, 15 Apr 2007 19:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Virtuellen Funktionen on Mon, 16 Apr 2007 07:46:28 GMT]]></title><description><![CDATA[<p>Jinzuu schrieb:</p>
<blockquote>
<p>Das war der Grund. Es läuft einwandfrei.<br />
So ein Mist. Ein kleines Sternchen vergessen und 3 Stunden für blöde Fehlersuche draufgegangen.</p>
</blockquote>
<p>Das wäre nicht passiert, wenn du dich an Scott Meyers' Rat &quot;Make non-leaf classes abstract&quot; gehalten hättest. In diesem Fall wäre ein Container&lt;Fahrzeug&gt; gar nicht erst möglich und das resultierende (aber ungewollte) Slicing könnte nicht auftreten. Und wenn man Basisklassen mal nicht abstrakt macht, dann sollte man zumindest das Kopieren per Default verbieten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1266912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1266912</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 16 Apr 2007 07:46:28 GMT</pubDate></item></channel></rss>