<?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[Spätes Binden in Methode der Oberklasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zur Zeit folgendes Problem und weiß nicht so recht, wie ich es lösen soll. Die Klassenstruktur sieht in etwa folgendermaßen aus:</p>
<pre><code class="language-cpp">class Oberklasse {
public:
  Oberklasse() {}

  virtual int getValue() { return 0; }
  void myMethod()
  {
    printf(&quot;%i\n&quot;, getValue());
  }
};

class Kindklasse : public Oberklasse {
public:
  Kindklasse() {}

  int getValue() { return 1; }
};
</code></pre>
<p>Wenn ich nun eine Instanz von Kindklasse habe und die Methode myMethod() aufrufe, soll erst zur Laufzeit entschieden werden, dass in diesem Fall in der Methode das getValue() der eigenen Instanz aufgerufen wird.<br />
So wie es jetzt ist, bekomm ich 0 zurückgeliefert, da immer die virtuelle Methode der Oberklasse gerufen wird.</p>
<p>Gibt es eine Möglichkeit, das zu ändern?<br />
Ich hoffe, ihr könnt mir bei dem Problem behilflich sein. Dafür wäre ich echt dankbar. <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270219/spätes-binden-in-methode-der-oberklasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 11:06:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270219.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jul 2010 12:55:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 12:55:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zur Zeit folgendes Problem und weiß nicht so recht, wie ich es lösen soll. Die Klassenstruktur sieht in etwa folgendermaßen aus:</p>
<pre><code class="language-cpp">class Oberklasse {
public:
  Oberklasse() {}

  virtual int getValue() { return 0; }
  void myMethod()
  {
    printf(&quot;%i\n&quot;, getValue());
  }
};

class Kindklasse : public Oberklasse {
public:
  Kindklasse() {}

  int getValue() { return 1; }
};
</code></pre>
<p>Wenn ich nun eine Instanz von Kindklasse habe und die Methode myMethod() aufrufe, soll erst zur Laufzeit entschieden werden, dass in diesem Fall in der Methode das getValue() der eigenen Instanz aufgerufen wird.<br />
So wie es jetzt ist, bekomm ich 0 zurückgeliefert, da immer die virtuelle Methode der Oberklasse gerufen wird.</p>
<p>Gibt es eine Möglichkeit, das zu ändern?<br />
Ich hoffe, ihr könnt mir bei dem Problem behilflich sein. Dafür wäre ich echt dankbar. <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923283</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Thu, 08 Jul 2010 12:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 13:00:36 GMT]]></title><description><![CDATA[<p>Das sollte eigentlich nicht so sein. Kannst du deinen konkreten Aufruf zeigen? Sind vielleicht irgendwelche Casts im Spiel?</p>
<p>P.S.: Warum benutzt du printf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923285</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Jul 2010 13:00:36 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 13:42:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine Funktion ist entweder virtuel oder inline. Beides ist meistens Unfug. Ich weiß zwar jetzt nicht, was der Standard in diesem Falle vorschreibt aber ich würde hier die Funktion ganz normal definieren.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923319</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Thu, 08 Jul 2010 13:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 13:54:22 GMT]]></title><description><![CDATA[<p>Was machst du denn genau?</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

class Oberklasse {
public:
  Oberklasse() {}

  virtual int getValue() { return 0; }
  void myMethod()
  {
    std::cout &lt;&lt; getValue() &lt;&lt; std::endl;
  }
};

class Kindklasse : public Oberklasse {
public:
  Kindklasse() {}

  int getValue() { return 1; }
};

int main(){
        Oberklasse o1;
        Kindklasse o2;
        Oberklasse* p1 = &amp;o1;
        Oberklasse* p2 = &amp;o2;
        p1-&gt;myMethod();
        p2-&gt;myMethod();
        return 0;
}
</code></pre>
<p>liefert:</p>
<blockquote>
<p>0<br />
1</p>
</blockquote>
<p>Kann es sein, dass du in Wirklichkeit hinter einer der Funktionen ein <code>const</code> hast und hinter der anderen nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923328</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 08 Jul 2010 13:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 13:58:45 GMT]]></title><description><![CDATA[<p>Hm, ich hab meinen Beispielcode mal selbst ausprobiert und musste feststellen, dass es funktioniert. Nun frage ich mich, warum es in meinem konkreten Fall nicht klappt.</p>
<p>printf hab ich jetzt nur aus Testzwecken benutzt. <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 />
Ich deklariere die Methode als virtuell, da ich mehrere Kindklassen habe und nur dadurch Polymorphie und somit spätes Binden gewährleistet ist. (nach meinem Wissensstand)</p>
<p>Ich werd nochmal über meinen Code schauen und versuche herauszufinden, an was es liegen könnte. Ich meld mich nochmal, sobald ich mehr weiß. <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/1923330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923330</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Thu, 08 Jul 2010 13:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 14:06:37 GMT]]></title><description><![CDATA[<p>Andere Vermutung: Du erstellst versehentlich irgendwo eine Kopie<br />
wie etwa in diesem Beispiel:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

class Oberklasse {
public:
  Oberklasse() {}

  virtual int getValue() { return 0; }
  void myMethod()
  {
    std::cout &lt;&lt; getValue() &lt;&lt; std::endl;
  }
};

class Kindklasse : public Oberklasse {
public:
  Kindklasse() {}

  int getValue() { return 1; }
};

void print(Oberklasse ok){
        ok.myMethod();
}

int main(){
        Oberklasse o1;
        Kindklasse o2;
        Oberklasse* p1 = &amp;o1;
        Oberklasse* p2 = &amp;o2;
        p1-&gt;myMethod();
        p2-&gt;myMethod();
        print(*p1);
        print(*p2);
        return 0;
}
</code></pre>
<blockquote>
<p>0<br />
1<br />
0<br />
0</p>
</blockquote>
<p>Mach dir mal ne Ausgabe in den Copy-Constructor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923336</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 08 Jul 2010 14:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 14:19:13 GMT]]></title><description><![CDATA[<p>Ja, ich glaube an diesem oder einem ähnlichen Problem lag es.<br />
Ich hab die Methoden einfach nochmal geschrieben und dabei aufgepasst alles richtig zu machen.<br />
Manchmal ist man eben doch blind und findet den Fehler einfach nicht obwohl er vor der Nase liegt. ^^</p>
<p>Vielen Dank an euch. <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/1923345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923345</guid><dc:creator><![CDATA[th3AddY]]></dc:creator><pubDate>Thu, 08 Jul 2010 14:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Thu, 08 Jul 2010 21:01:09 GMT]]></title><description><![CDATA[<p>th3AddY schrieb:</p>
<blockquote>
<p>Ich deklariere die Methode als virtuell, da ich mehrere Kindklassen habe und nur dadurch Polymorphie und somit spätes Binden gewährleistet ist. (nach meinem Wissensstand)</p>
</blockquote>
<p>Es gibt genau einen Grund, weshalb virtuelle Funktionen erforderlich sind:</p>
<p>Du hast einen Zeiger auf eine Basisklasse, der auf einem Objekt einer abgeleiteten Klasse verweist. Wenn Du zur Compiletime nicht weißt, welchen Typ das Objekt hat, auf das der Zeiger verweist und Du aber möchtest, das eine eventuell überladene Memberfunktion richtig aufgerufen wird, dann und nur dann mußt Du die Memberfunktion virtuel deklarieren.</p>
<p>In allen Fällen, wo der Compiler schon zur Übersetzungszeit weiß, um was für ein Objekt es sich handelt, ist es nicht erforderlich und nur Zeit- und Speicherverschwendung.</p>
<p>Ach ja: Mit Polymorphie hat das auch nichts zu tun.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923584</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Thu, 08 Jul 2010 21:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Fri, 09 Jul 2010 08:25:05 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Ach ja: Mit Polymorphie hat das auch nichts zu tun.</p>
</blockquote>
<p>Das nehme ich zurück. Da hab' ich was verwechselt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923720</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Fri, 09 Jul 2010 08:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Fri, 09 Jul 2010 19:17:47 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Ach ja: Mit Polymorphie hat das auch nichts zu tun.</p>
</blockquote>
<p>Ach?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924052</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 09 Jul 2010 19:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Spätes Binden in Methode der Oberklasse on Sat, 10 Jul 2010 03:46:11 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Ach ja: Mit Polymorphie hat das auch nichts zu tun.</p>
</blockquote>
<p>Ach?</p>
</blockquote>
<p>lern lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924135</guid><dc:creator><![CDATA[ach]]></dc:creator><pubDate>Sat, 10 Jul 2010 03:46:11 GMT</pubDate></item></channel></rss>