<?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]]></title><description><![CDATA[<p>Obwohl ich kein virtual verwende wird es richtig aufgerufen.<br />
Eigentlich sollte doch myfunk aus A aufgerufen werden oder.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class A{

public: 
	 void myfunk(){cout&lt;&lt;&quot;Klasse A&quot;;};

};

class B:public A
{
public:

	void myfunk(){cout&lt;&lt;&quot;Klasse B&quot;;};

};

int main()
{

B objekt;

objekt.myfunk(); // Es wird myfunk von B aufgerufen 

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/293432/virtual</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 07:24:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293432.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Oct 2011 22:57:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 22:57:28 GMT]]></title><description><![CDATA[<p>Obwohl ich kein virtual verwende wird es richtig aufgerufen.<br />
Eigentlich sollte doch myfunk aus A aufgerufen werden oder.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class A{

public: 
	 void myfunk(){cout&lt;&lt;&quot;Klasse A&quot;;};

};

class B:public A
{
public:

	void myfunk(){cout&lt;&lt;&quot;Klasse B&quot;;};

};

int main()
{

B objekt;

objekt.myfunk(); // Es wird myfunk von B aufgerufen 

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2126477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126477</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 02 Oct 2011 22:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 23:02:56 GMT]]></title><description><![CDATA[<p><code>objekt</code> ist vom Typ <code>B</code> , wieso sollte da also die Funktion von <code>A</code> aufgerufen werden!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126479</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 02 Oct 2011 23:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 23:14:27 GMT]]></title><description><![CDATA[<p>Ok.</p>
<pre><code class="language-cpp">void rateMal(A *rate)
{
    rate-&gt;myfunk();
}
</code></pre>
<p>Es gibt wohl nur hier Probleme.<br />
Wenn ich ein B Objekt übergebe, wird immer noch Klasse A aufgerufen.<br />
Liegt das nur daran dass C performant ist und der Compiler keine Zeit hat sich anzuschauen dass eigentlich ein B Objekt übergeben wurde.</p>
<p>Und wenn ich virtual verwende sage ich dem Compiler er soll doch bitte nochmal genauer hinschaun <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="🙂"
    /> Denn ich bin ja der Programmierer und weiß dass ich die gleiche Funktion in einer abgeleiteten Klasse nochmal verwende . So is es doch .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126480</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 02 Oct 2011 23:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 23:08:32 GMT]]></title><description><![CDATA[<p>Du solltest einen P.I.-Zeiger verwenden, der kann virtual calls ohne overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126481</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 02 Oct 2011 23:08:32 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 23:13:00 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Wenn ich ein B Objekt übergebe, wird immer noch Klasse A aufgerufen.<br />
Liegt das nur daran dass C performant ist und der Compiler keine Zeit hat sich anzuschauen dass eigentlich ein B Objekt übergeben wurde.</p>
</blockquote>
<p>Du übergibst hier kein B Objekt, sondern einen Zeiger auf ein A. Der Grund warum nun die Methode von A aufgerufen wird ist, dass die Methode nicht virtual ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126482</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 02 Oct 2011 23:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Sun, 02 Oct 2011 23:41:20 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Obwohl ich kein virtual verwende wird es richtig aufgerufen.<br />
Eigentlich sollte doch myfunk aus A aufgerufen werden oder.</p>
</blockquote>
<p>Erinnerst Du Dich noch an die Grundschulzeit, als Dir das Fragezeichen beigebracht wurde?</p>
<p>Du gehst mir so auf die Nerven.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126484</guid><dc:creator><![CDATA[ForenTroll]]></dc:creator><pubDate>Sun, 02 Oct 2011 23:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 06:19:44 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>P.I.-Zeiger</p>
</blockquote>
<p>Was meinst Du damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126522</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 03 Oct 2011 06:19:44 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 06:37:38 GMT]]></title><description><![CDATA[<p>Sag bloß, du kennst keine P.I. Zeiger? Die speichern einen Funktionszeiger + Objektzeiger in 1 Byte rein und damit kann man virtual calls direkt machen, sogar mit weniger Speicherverbrauch als mit normalen Zeigern.</p>
<p>PI-Zeiger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2764.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--red_heart"
      title="&lt;3"
      alt="❤"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126526</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 06:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 06:51:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Sag bloß, du kennst keine P.I. Zeiger?</p>
</blockquote>
<p>Sonst hätte ich wohl nicht gefragt.</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Die speichern einen Funktionszeiger + Objektzeiger in 1 Byte rein und damit kann man virtual calls direkt machen, sogar mit weniger Speicherverbrauch als mit normalen Zeigern.</p>
</blockquote>
<p>Der Text bietet leider keine Referenz und auch nichts, nach dem man googeln könnte, wenn man wissen wollte, was das sein soll bzw wie es funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126528</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 03 Oct 2011 06:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 06:54:15 GMT]]></title><description><![CDATA[<p>Ach komm, dass das Blödsinn ist, ist dir doch bestimmt aufgefallen, oder? <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/2126529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126529</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 06:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 06:59:08 GMT]]></title><description><![CDATA[<p>@blurry: RTFM, STFW, GIYF. Was soll man da machen.</p>
<p>Virtuelle Methoden funkionieren so:</p>
<p>Für die dynamische Bindung wird zuerst im referenzierten Objekt der virtuelle Methoden-Zeiger auf die VMT(entsprechend der Klasse) ausgewertet, anschließend wird aus dieser die Adresse der virtuellen Methode verwendet. Da sagst du nich' dem Compiler, er soll nochmal genau nachschaun' was du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126530</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 06:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:03:16 GMT]]></title><description><![CDATA[<p>Und was ist ein virtueller Methodenzeiger? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126531</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:08:26 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Und was ist ein virtueller Methodenzeiger? :p</p>
</blockquote>
<p>Da du so ein erfahrener und erfolgreicher Software-Entwickler bist, hast du die überaus große Ehre, das zu präsentieren. <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126532</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:09:05 GMT]]></title><description><![CDATA[<p>Ich hätte dich nicht gefragt, wenn ichs nicht wüsste. Virtueller Zeiger klingt aber voll toll. Erklär mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126533</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:15:21 GMT]]></title><description><![CDATA[<p>Wie wärs damit?:</p>
<p>Ein virtueller Methodenzeiger ist ein vom Compiler erzeugter (also interner) Funktionszeiger, der je virtueller Methode jedes Objektes diesen zur Verfügung gestellt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126534</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:15:21 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:15:23 GMT]]></title><description><![CDATA[<p>Und was ist an dem Zeiger nun virtuell?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126535</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:22:13 GMT]]></title><description><![CDATA[<p>Das er erst zur Laufzeit erzeugt (und dereferenziert wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126536</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:23:44 GMT]]></title><description><![CDATA[<p>Ein Zeiger der zur Laufzeit erzeugt wird? Erklär das mal genauer. <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="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126538</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:24:38 GMT]]></title><description><![CDATA[<p>Meinst du die vtable?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126539</guid><dc:creator><![CDATA[wtfwtf]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:29:11 GMT]]></title><description><![CDATA[<p>wtfwtf schrieb:</p>
<blockquote>
<p>Meinst du die vtable?!</p>
</blockquote>
<p>VMT &lt;-&gt; Virtual Method Table.</p>
<p>Das er zur Laufzeit erzeugt wird, bedeutet im Endeffekt, dass der Programmierer keinerlei Kontakt mit ihm hat und ihn nicht Kontrollieren kann.<br />
Der Zeiger existiert nur vorübergehend, um die Relationen in den Stammbäumen der Klassen im Bezug auf Virtuelle Methoden korrekt auszugleichen.<br />
Du, Pi, hast auch schon mal versucht das nachzubauen.</p>
<p>Ja, vtalble - so nennt Sie der Compiler.</p>
<pre><code>Undefined reference to 'vtable for MyClass::~Myclass()'
</code></pre>
<p>oder so ähnlich, das hat ich schon öfter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126541</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:28:16 GMT]]></title><description><![CDATA[<p>Und wie wird der erzeugt? Durch irgend einen Kobold oder so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126542</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:33:47 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Und wie wird der erzeugt? Durch irgend einen Kobold oder so?</p>
</blockquote>
<p>Ja. Ein 2cm großer Kobold namens Grämlin sitzt in deinem PC und kackt Methodenzeiger. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Nein, ohne witz mal. Ich glaub(weiß es aber nicht), der Zeiger wird vom Compiler erzeugt, und zeigt anfangs auf die Basisklassenmethode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126545</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:32:43 GMT]]></title><description><![CDATA[<p>Du meinst wohl Gremlin.<br />
Wie auch immer, lies dir besser nochmal deinen Wiki-Artikel durch, das mit dem zur Laufzeit erzeugten, virtuellen Zeiger ist Unfug <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/2126546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126546</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 07:35:55 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Du meinst wohl Gremlin.<br />
Wie auch immer, lies dir besser nochmal deinen Wiki-Artikel durch, das mit dem zur Laufzeit erzeugten, virtuellen Zeiger ist Unfug <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>
</blockquote>
<p>Hast wohl recht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126547</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 Oct 2011 07:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 15:45:26 GMT]]></title><description><![CDATA[<p>Kann mir mal einer ein Beispiel nennen warum nicht schon zur Compilezeit bei einem Base Class Pointer bestimmen kann ob die Funktion aus der Base Class oder einer abgeleiteten Klasse verwendet werden soll. Der Compiler sieht doch welcher Typ uebergeben wird.</p>
<pre><code class="language-cpp">void funktion(Base* ptr)
{
     //do something
}

main()
{
// Der Compiler sollte doch erkennen dass eine abgeleitete KLasse uebergeben wird
funktion (&amp; DerivedClass ) ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2126763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126763</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Mon, 03 Oct 2011 15:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to virtual on Mon, 03 Oct 2011 15:49:54 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Der Compiler sieht doch welcher Typ uebergeben wird.</p>
</blockquote>
<p>Wenn er die Funktion kompiliert, dann weiß der Compiler nur, dass ein Base* übergeben wird. Die Funktion könnte zur Laufzeit aus einer Bibliothek aus aufgerufen werden oder sonstwas, wo der Compiler nichtmal theoretisch den Quellcode des Aufrufs kennen könnte...</p>
<p>Allerdings sind moderne Compiler sehr schlau und werden, wenn angebracht, entsprechende Optimierungen anwenden, wenn sie den Typ des übergebene Objektes zur Laufzeit bestimmen können. Das sind aber nur Optmierungen, die in manchen Fällen möglich sind und ändert nichts am Prinzip der Polymorphie...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126767</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 03 Oct 2011 15:49:54 GMT</pubDate></item></channel></rss>