<?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[Überschreiben von Funktionen]]></title><description><![CDATA[<p>Das ist eine Probeklausuraufgabe. Das Programm ist gegeben und man soll die Ausgabe angeben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

struct A
{
    virtual void a() = 0;
};

class B : public A
{
public:
    B()
    {
        ausgabe(&quot;B()&quot;);
    }
    virtual ~B()
    {
        ausgabe(&quot;~B()&quot;);
    }
    static void ausgabe(const
                        string&amp; text)
    {
        cout &lt;&lt; &quot;#&quot; &lt;&lt; z &lt;&lt; &quot;: &quot;
             &lt;&lt; text &lt;&lt; endl;
        z++;
    }
private:
    static int z;
};

int B::z = 0;

class C : public B
{
public:
    C()
    {
        ausgabe(&quot;C()&quot;);
    }
    virtual ~C()
    {
        ausgabe(&quot;~C()&quot;);
    }
    void a()
    {
        ausgabe(&quot;C::a()&quot;);
    }
    void c()
    {
        ausgabe(&quot;C::c()&quot;);
    }
};

class D : public C
{
public:
    D()
    {
        ausgabe(&quot;D()&quot;);
    }
    virtual ~D()
    {
        ausgabe(&quot;~D()&quot;);
    }
    void a()
    {
        ausgabe(&quot;D::a()&quot;);
    }
    void c()
    {
        ausgabe(&quot;D::c()&quot;);
    }
    void d()
    {
        ausgabe(&quot;D::d()&quot;);
        C::a();
    }
};

int main()
{
    B::ausgabe(&quot;START&quot;);
    A* za = new C();
    za-&gt;a();
    delete za;
    B* zb = new C();
    zb-&gt;a();
    delete zb;
    D d;
    A&amp; ra = d;
    ra.a();
    C&amp; rc = d;
    rc.a();
    rc.c();
    D&amp; rd = d;
    rd.a();
    rd.c();
    rd.d();
    B::ausgabe(&quot;ENDE&quot;);
}
</code></pre>
<p>Es geht um die Zeilen:</p>
<pre><code>C&amp; rc = d;
    rc.a();
    rc.c();
</code></pre>
<p>Ich dachte es würde das hier ausgeben:<br />
#13: D::a()<br />
#14: D::c()</p>
<p>Allerdings gibt es das hier aus:<br />
#13: D::a()<br />
#14: C::c()</p>
<p>Ich versteh nicht warum es C::c() ausgibt. D::c() überschreibt es scheinbar nicht.<br />
Allerdings wird C::a() in der Zeile davor von D::a() überschrieben.<br />
Warum überschreibt er es in Zeile 13, aber nicht in Zeile 14?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326813/überschreiben-von-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 14:49:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326813.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Jul 2014 16:01:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 16:01:29 GMT]]></title><description><![CDATA[<p>Das ist eine Probeklausuraufgabe. Das Programm ist gegeben und man soll die Ausgabe angeben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

struct A
{
    virtual void a() = 0;
};

class B : public A
{
public:
    B()
    {
        ausgabe(&quot;B()&quot;);
    }
    virtual ~B()
    {
        ausgabe(&quot;~B()&quot;);
    }
    static void ausgabe(const
                        string&amp; text)
    {
        cout &lt;&lt; &quot;#&quot; &lt;&lt; z &lt;&lt; &quot;: &quot;
             &lt;&lt; text &lt;&lt; endl;
        z++;
    }
private:
    static int z;
};

int B::z = 0;

class C : public B
{
public:
    C()
    {
        ausgabe(&quot;C()&quot;);
    }
    virtual ~C()
    {
        ausgabe(&quot;~C()&quot;);
    }
    void a()
    {
        ausgabe(&quot;C::a()&quot;);
    }
    void c()
    {
        ausgabe(&quot;C::c()&quot;);
    }
};

class D : public C
{
public:
    D()
    {
        ausgabe(&quot;D()&quot;);
    }
    virtual ~D()
    {
        ausgabe(&quot;~D()&quot;);
    }
    void a()
    {
        ausgabe(&quot;D::a()&quot;);
    }
    void c()
    {
        ausgabe(&quot;D::c()&quot;);
    }
    void d()
    {
        ausgabe(&quot;D::d()&quot;);
        C::a();
    }
};

int main()
{
    B::ausgabe(&quot;START&quot;);
    A* za = new C();
    za-&gt;a();
    delete za;
    B* zb = new C();
    zb-&gt;a();
    delete zb;
    D d;
    A&amp; ra = d;
    ra.a();
    C&amp; rc = d;
    rc.a();
    rc.c();
    D&amp; rd = d;
    rd.a();
    rd.c();
    rd.d();
    B::ausgabe(&quot;ENDE&quot;);
}
</code></pre>
<p>Es geht um die Zeilen:</p>
<pre><code>C&amp; rc = d;
    rc.a();
    rc.c();
</code></pre>
<p>Ich dachte es würde das hier ausgeben:<br />
#13: D::a()<br />
#14: D::c()</p>
<p>Allerdings gibt es das hier aus:<br />
#13: D::a()<br />
#14: C::c()</p>
<p>Ich versteh nicht warum es C::c() ausgibt. D::c() überschreibt es scheinbar nicht.<br />
Allerdings wird C::a() in der Zeile davor von D::a() überschrieben.<br />
Warum überschreibt er es in Zeile 13, aber nicht in Zeile 14?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407615</guid><dc:creator><![CDATA[Redsister]]></dc:creator><pubDate>Tue, 08 Jul 2014 16:01:29 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 16:04:44 GMT]]></title><description><![CDATA[<p>a ist virtual und c nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407617</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 08 Jul 2014 16:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 16:49:32 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>a ist virtual und c nicht.</p>
</blockquote>
<p>a() ist nicht virtual.<br />
a() und c() sind genau gleich definiert (mit dem Unterschied, dass sie anders heißen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407636</guid><dc:creator><![CDATA[Redsister]]></dc:creator><pubDate>Tue, 08 Jul 2014 16:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 16:55:27 GMT]]></title><description><![CDATA[<p>Wenn du das so genau weißt, wieso fragst du dann? Und dein Compiler ist wohl auch kaputt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2407637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407637</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 08 Jul 2014 16:55:27 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 17:43:05 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Wenn du das so genau weißt, wieso fragst du dann?</p>
</blockquote>
<p>Weil ich mir es nicht erklären kann warum a() überschrieben wird und c() nicht obwohl sie gleich definiert sind.</p>
<p>Bashar schrieb:</p>
<blockquote>
<p>Und dein Compiler ist wohl auch kaputt <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>
</blockquote>
<p>Wie kommst du zu dieser Feststellung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407649</guid><dc:creator><![CDATA[Redsister]]></dc:creator><pubDate>Tue, 08 Jul 2014 17:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Tue, 08 Jul 2014 17:47:33 GMT]]></title><description><![CDATA[<p>Redsister schrieb:</p>
<blockquote>
<p>Weil ich mir es nicht erklären kann warum a() überschrieben wird und c() nicht obwohl sie gleich definiert sind.</p>
</blockquote>
<p>Sind sie nicht! <code>a</code> ist in der Basisklasse als virtuell deklariert!</p>
<pre><code>virtual void a() = 0;
</code></pre>
<p>Redsister schrieb:</p>
<blockquote>
<p>Wie kommst du zu dieser Feststellung?</p>
</blockquote>
<p>Wenn sowohl Leute, bei denen du um Hilfe fragst, als auch der Compiler eindeutig darauf hinweisen, dass deine Annahme falsch ist, was ist wohl der naheliegendste Schluss? Dass wir Unrecht haben und der Compiler kaputt ist, genau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407650</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 08 Jul 2014 17:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Wed, 09 Jul 2014 11:55:03 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Redsister schrieb:</p>
<blockquote>
<p>Weil ich mir es nicht erklären kann warum a() überschrieben wird und c() nicht obwohl sie gleich definiert sind.</p>
</blockquote>
<p>Sind sie nicht! <code>a</code> ist in der Basisklasse als virtuell deklariert!</p>
<pre><code>virtual void a() = 0;
</code></pre>
<p>Redsister schrieb:</p>
<blockquote>
<p>Wie kommst du zu dieser Feststellung?</p>
</blockquote>
<p>Wenn sowohl Leute, bei denen du um Hilfe fragst, als auch der Compiler eindeutig darauf hinweisen, dass deine Annahme falsch ist, was ist wohl der naheliegendste Schluss? Dass wir Unrecht haben und der Compiler kaputt ist, genau.</p>
</blockquote>
<p>Tut mir leid, wenn du dich angegriffen gefühlt hast. Ich wollte deine Antwort nicht in Frage stellen. <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>Redsister schrieb:</p>
<blockquote>
<p>Bashar schrieb:</p>
<blockquote>
<p>a ist virtual und c nicht.</p>
</blockquote>
<p>a() ist nicht virtual.<br />
a() und c() sind genau gleich definiert (mit dem Unterschied, dass sie anders heißen)</p>
</blockquote>
<p>Ich habe lediglich das virtual a() in struct A nicht gesehen. Einen Hinweis darauf wo es steht hätte genügt, dann hätte ich dir sofort geglaubt.</p>
<p>Aber trotzdem vielen Dank für deine Antwort! <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/2407757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407757</guid><dc:creator><![CDATA[Redsister]]></dc:creator><pubDate>Wed, 09 Jul 2014 11:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Wed, 09 Jul 2014 12:00:57 GMT]]></title><description><![CDATA[<p>Redsister schrieb:</p>
<blockquote>
<p>Tut mir leid, wenn du dich angegriffen gefühlt hast. Ich wollte deine Antwort nicht in Frage stellen. <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>
</blockquote>
<p>War nicht meine Antwort, sondern Bashars.</p>
<p>Vielleicht ein genereller Hinweis: Lies Antworten lieber zwei Mal durch und versuche genau zu verstehen, was damit gemeint ist, statt a priori zu widersprechen... besonders wenn wie erwähnt alles darauf hindeutet, dass sie stimmen könnte <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/2407759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407759</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Jul 2014 12:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Überschreiben von Funktionen on Wed, 09 Jul 2014 12:23:18 GMT]]></title><description><![CDATA[<p>Oh, hab grad nicht auf den Namen geachtet</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Vielleicht ein genereller Hinweis: Lies Antworten lieber zwei Mal durch und versuche genau zu verstehen, was damit gemeint ist, statt a priori zu widersprechen... besonders wenn wie erwähnt alles darauf hindeutet, dass sie stimmen könnte <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>
</blockquote>
<p>Ich hab ja nicht ausgeschlossen, dass es stimmen könnte, nur hab ich nicht gesehen wo es steht. Du hast es ja so geschrieben, dass ich wusste wo es stand.<br />
Hätte ich das virtual gesehen wäre die Frage überflüssig gewesen.<br />
Ich formulier es das nächste mal anders, wenn ich etwas nicht sehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407768</guid><dc:creator><![CDATA[Redsister]]></dc:creator><pubDate>Wed, 09 Jul 2014 12:23:18 GMT</pubDate></item></channel></rss>