<?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 zur Überschreibung]]></title><description><![CDATA[<p>Der erste Code ist OK weil es aus dem Buch kommt, nur beim zweiten Code gibt es Probleme.</p>
<pre><code>struct B {
	virtual void f() const { cout &lt;&lt;&quot;B::f&quot; &lt;&lt; endl; }
	void g() const {cout &lt;&lt; &quot;B::g&quot; &lt;&lt; endl; }
};

struct D:B
{
	void f() const { cout &lt;&lt; &quot;D::f&quot; &lt;&lt; endl; }
	void g() { cout &lt;&lt; &quot;D::g&quot; &lt;&lt; endl; }
};

struct DD:D
{
	void f() { cout &lt;&lt; &quot;DD::f&quot; &lt;&lt; endl; }
	void g() const { cout &lt;&lt; &quot;DD::g&quot; &lt;&lt; endl; }
};
</code></pre>
<pre><code class="language-cpp">void call(const B&amp; b)
{
	b.f();
	b.g();
}

int main()
{
	B b;
	D d;
	DD dd;

	call(b);
	call(d);
	call(dd);

	b.f();
	b.g();

	d.f();
	d.g();

	dd.f();
	dd.g();
}
</code></pre>
<p>Dieser Code gibt folgendes aus:</p>
<pre><code>B::f B::g D::f B::g D::f B::g B::f B::g D::f D::g DD::f DD::g
</code></pre>
<p>Soweit so gut, aber was mir nicht klar ist mit der Vererbung ist der folgende code:</p>
<pre><code>class B1
{
public:
	virtual void vf() const { cout &lt;&lt; &quot;B1::vf()&quot; &lt;&lt; &quot;\n&quot;; }
	void f() const {cout &lt;&lt; &quot;B1::f()&quot; &lt;&lt; &quot;\n&quot;; }
};

class D1:B1
{
public:
	void vf() const { cout &lt;&lt; &quot;D1::vf()&quot; &lt;&lt; &quot;\n&quot;; }
	void f() { cout &lt;&lt; &quot;D1::f()&quot; &lt;&lt; &quot;\n&quot;; }
};
</code></pre>
<pre><code class="language-cpp">int main()
{
	B1 bb;
	bb.vf();
	bb.f();

	D1 dd;
	dd.vf();
	dd.f();

	return 0;
	keep_window_open();
}
</code></pre>
<p>Diese Ausgabe macht:</p>
<pre><code>B1::vf() B1::f() D1::vf() D1::f()
</code></pre>
<p>Das mit der Überschreibung ist mir klar da es sich um eine virtuelle Funktion handelt. Aber wieso wird auch die Funktion f() in D1 überschreiben. Es sollte doch f() von B1 erben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296251/frage-zur-überschreibung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 01:12:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296251.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Nov 2011 19:00:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Überschreibung on Wed, 30 Nov 2011 19:00:42 GMT]]></title><description><![CDATA[<p>Der erste Code ist OK weil es aus dem Buch kommt, nur beim zweiten Code gibt es Probleme.</p>
<pre><code>struct B {
	virtual void f() const { cout &lt;&lt;&quot;B::f&quot; &lt;&lt; endl; }
	void g() const {cout &lt;&lt; &quot;B::g&quot; &lt;&lt; endl; }
};

struct D:B
{
	void f() const { cout &lt;&lt; &quot;D::f&quot; &lt;&lt; endl; }
	void g() { cout &lt;&lt; &quot;D::g&quot; &lt;&lt; endl; }
};

struct DD:D
{
	void f() { cout &lt;&lt; &quot;DD::f&quot; &lt;&lt; endl; }
	void g() const { cout &lt;&lt; &quot;DD::g&quot; &lt;&lt; endl; }
};
</code></pre>
<pre><code class="language-cpp">void call(const B&amp; b)
{
	b.f();
	b.g();
}

int main()
{
	B b;
	D d;
	DD dd;

	call(b);
	call(d);
	call(dd);

	b.f();
	b.g();

	d.f();
	d.g();

	dd.f();
	dd.g();
}
</code></pre>
<p>Dieser Code gibt folgendes aus:</p>
<pre><code>B::f B::g D::f B::g D::f B::g B::f B::g D::f D::g DD::f DD::g
</code></pre>
<p>Soweit so gut, aber was mir nicht klar ist mit der Vererbung ist der folgende code:</p>
<pre><code>class B1
{
public:
	virtual void vf() const { cout &lt;&lt; &quot;B1::vf()&quot; &lt;&lt; &quot;\n&quot;; }
	void f() const {cout &lt;&lt; &quot;B1::f()&quot; &lt;&lt; &quot;\n&quot;; }
};

class D1:B1
{
public:
	void vf() const { cout &lt;&lt; &quot;D1::vf()&quot; &lt;&lt; &quot;\n&quot;; }
	void f() { cout &lt;&lt; &quot;D1::f()&quot; &lt;&lt; &quot;\n&quot;; }
};
</code></pre>
<pre><code class="language-cpp">int main()
{
	B1 bb;
	bb.vf();
	bb.f();

	D1 dd;
	dd.vf();
	dd.f();

	return 0;
	keep_window_open();
}
</code></pre>
<p>Diese Ausgabe macht:</p>
<pre><code>B1::vf() B1::f() D1::vf() D1::f()
</code></pre>
<p>Das mit der Überschreibung ist mir klar da es sich um eine virtuelle Funktion handelt. Aber wieso wird auch die Funktion f() in D1 überschreiben. Es sollte doch f() von B1 erben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151206</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Wed, 30 Nov 2011 19:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Überschreibung on Wed, 30 Nov 2011 19:06:09 GMT]]></title><description><![CDATA[<p>Jetzt ist es klar geworden, es fehlt ja eine Funktion. Weil ja dd die Funktion f() direkt aufruft. Sorry nächstes mal werde ich besser aufpassen bevor ich etwas hier reinschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151207</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Wed, 30 Nov 2011 19:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Überschreibung on Wed, 30 Nov 2011 19:49:04 GMT]]></title><description><![CDATA[<p>winux schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct B {
	virtual void f() const { cout &lt;&lt;&quot;B::f&quot; &lt;&lt; endl; }
	void g() const {cout &lt;&lt; &quot;B::g&quot; &lt;&lt; endl; }
};

struct D:B
{
	void f() const { cout &lt;&lt; &quot;D::f&quot; &lt;&lt; endl; }
	void g() { cout &lt;&lt; &quot;D::g&quot; &lt;&lt; endl; }
};

struct DD:D
{
	void f() { cout &lt;&lt; &quot;DD::f&quot; &lt;&lt; endl; }
	void g() const { cout &lt;&lt; &quot;DD::g&quot; &lt;&lt; endl; }
};
</code></pre>
</blockquote>
<p>Noch ein Hinweis: Man kann nur virtual-Funktionen überschreiben. g() wird nicht überschreiben, sondern verdeckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151217</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Nov 2011 19:49:04 GMT</pubDate></item></channel></rss>