<?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[virtual Methode]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class instrument{

public:

   void klingen()
  {

    cout&lt;&lt;&quot;Instrumente haben einen Klang&quot;;

  }

};

class trompete:public instrument
{

public:

void   klingen()
  {
       cout&lt;&lt; &quot;die Trompete trompetet&quot;; 

  }

};

void main(void)
{

 trompete x;

 x.klingen();  //Ausgabe die Trompete trompetet

}
</code></pre>
<p>Wann braucht man denn das Schluesselwort &quot;virtual&quot;? Im Codebeispiel oben<br />
wird ja auch ohne virtual die Methode klingen der abgeleiteten Klasse ausgegeben ?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246988/virtual-methode</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 20:45:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246988.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Aug 2009 16:15:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to virtual Methode on Tue, 04 Aug 2009 16:15:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class instrument{

public:

   void klingen()
  {

    cout&lt;&lt;&quot;Instrumente haben einen Klang&quot;;

  }

};

class trompete:public instrument
{

public:

void   klingen()
  {
       cout&lt;&lt; &quot;die Trompete trompetet&quot;; 

  }

};

void main(void)
{

 trompete x;

 x.klingen();  //Ausgabe die Trompete trompetet

}
</code></pre>
<p>Wann braucht man denn das Schluesselwort &quot;virtual&quot;? Im Codebeispiel oben<br />
wird ja auch ohne virtual die Methode klingen der abgeleiteten Klasse ausgegeben ?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755205</guid><dc:creator><![CDATA[blurry33]]></dc:creator><pubDate>Tue, 04 Aug 2009 16:15:16 GMT</pubDate></item><item><title><![CDATA[Reply to virtual Methode on Tue, 04 Aug 2009 16:19:46 GMT]]></title><description><![CDATA[<p>Der Sinn von virtual ist es ohne das Instrument zu kennen die richtigen Töne zu spielen. <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="😉"
    /><br />
Sprich so etwas zu machen:</p>
<pre><code class="language-cpp">void main(void)
{

 trompete x;
 instrument* i = &amp;x;

 x.klingen();  //Ausgabe die Trompete trompetet
 i-&gt;klingen (); // Ausgabe ebenfalls Trompete trompetet
}
</code></pre>
<p>Das ist ohne <code>virtual</code> nicht möglich. Aber eben mal ein <code>virtual</code> vor <code>klingen</code> in instrument und schonn klappt das so. Dabei solltest du nicht vergessen den Destruktor der Basisklasse ebenfalls virtual zu machen, damit das zerstören der abgeleiteten Klasse durch eine Basisklasse möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755209</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 04 Aug 2009 16:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to virtual Methode on Tue, 04 Aug 2009 17:31:57 GMT]]></title><description><![CDATA[<p>Besonders sinnvoll ist es, wenn du z.B. ein Array von Instrumenten hast:</p>
<pre><code class="language-cpp">std::vector&lt;instrument *&gt; orchester;

orchester.push_back(new trompete());
orchester.push_back(new schlagzeug());
orchester.push_back(new violine());

for(std::vector&lt;instrument *&gt;::iterator it = orchester.begin(); it != orchester.end(); it++)
{
  it-&gt;klingen();
}
</code></pre>
<p>Beachte: Polymorphie (d.h. die Verwendung von virtuellen Funktionen) klappt nur mittels Zeigern!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755236</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 04 Aug 2009 17:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to virtual Methode on Tue, 04 Aug 2009 17:40:02 GMT]]></title><description><![CDATA[<p>blurry33 schrieb:</p>
<blockquote>
<p>Wann braucht man denn das Schluesselwort &quot;virtual&quot;? Im Codebeispiel oben wird ja auch ohne virtual die Methode klingen der abgeleiteten Klasse ausgegeben ?</p>
</blockquote>
<p>In der Objektorientierung will man eigentlich beliebige Nachrichten an Objekte senden können. Wie die Objekte reagieren und ob sie überhaupt reagieren ist dann alleine deren Sache bzw. hängt von deren Konstruktion ab.</p>
<p>D.h. wenn ich z.B. verschiedene Objekte &quot;<em>verbrennen</em>&quot; will interessiert mich nicht von was für einem Typ die Objekte genau sind. Ich will einfach eine Nachricht an das Objekt senden (z.B. so: <em>meinObjekt.verbrenne()</em> ) und das Objekt soll dann entsprechend reagieren.</p>
<p>Leider ist das in dem streng typisierten c++ nicht möglich. Ich muss in c++ den Typ einer Variablen/eines Objekts immer angeben und wenn die Klasse des Objekts keine Methode <em>verbrenne()</em> definiert, dann ist der Aufruf <em>meinObjekt.verbrenne()</em> für dieses Objekt auch noch ein Fehler.</p>
<p>Man kann daher bei c++ nicht wirklich von einer objektorientierten Programmiersprache sprechen.</p>
<p>Virtuelle Funktionen sind der verkrüppelte Versuch dem Programmierer etwas von der obigen Funktionalität anzubieten.</p>
<p>Indem du alle Klassen von derselben Basisklasse erben lässt ist gesichert, dass sie auch eine spezielle Methode anbieten (z.B. <em>verbrenne()</em>). Und indem man abgeleitete Objekte an Zeiger bzw. Referenzen der Basisklasse binden kann, umgeht man die strenge Typisierung und kann so <em>verbrenne()</em> zwar nicht auf beliebige Objekte aber immerhin auf Objekte mit derselben Basisklasse anwenden.</p>
<p>P.S.: Täuschen mich meine trüben Augen, oder postet camper wieder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755244</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Tue, 04 Aug 2009 17:40:02 GMT</pubDate></item></channel></rss>