<?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[Vererbung &amp;quot;Kontext&amp;quot;problem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden Code:</p>
<pre><code class="language-cpp">class Base
{
public:
	Base() { x = 10; }
	virtual void foo() { --x; }
	virtual void bar() { return; }

protected:
	int x;
};

class Class1 : public Base
{
public:
	virtual void bar() { foo(); }
};

class Class2 : public Class1
{
public:
	virtual void foo() { x = x-4; }
	virtual void bar() { Class1::bar(); }
};
</code></pre>
<p>Benutzt wird der Code so:</p>
<pre><code class="language-cpp">Class2 c;
c.bar();
</code></pre>
<p>Erwartet hätte ich, dass in x danach 9 steht. x ist aber 6, da foo() von Class2 ausgeführt wird und nicht foo() von Class1, welches das foo() von Base wäre. Gibt es eine andere Möglichkeit den Kontext in dem der Code ausgeführt zu ändern als</p>
<pre><code class="language-cpp">class Class1 : public Base
{
public:
	virtual void bar() { Class1::foo(); }
};
</code></pre>
<p>zu schreiben? Sonst müsste ich ja in jeder Klasse die Funktionen so umschreiben, dass explizit nur die eigenen genommen werden, falls irgendeine Klasse von dieser erbt, ihre Funktion aufruft, aber gleichzeitig eine andere Funktion überschrieben hat, welche dann aufgerufen wird.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290847/vererbung-quot-kontext-quot-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 04:43:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290847.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Aug 2011 12:24:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung &amp;quot;Kontext&amp;quot;problem on Thu, 04 Aug 2011 12:24:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden Code:</p>
<pre><code class="language-cpp">class Base
{
public:
	Base() { x = 10; }
	virtual void foo() { --x; }
	virtual void bar() { return; }

protected:
	int x;
};

class Class1 : public Base
{
public:
	virtual void bar() { foo(); }
};

class Class2 : public Class1
{
public:
	virtual void foo() { x = x-4; }
	virtual void bar() { Class1::bar(); }
};
</code></pre>
<p>Benutzt wird der Code so:</p>
<pre><code class="language-cpp">Class2 c;
c.bar();
</code></pre>
<p>Erwartet hätte ich, dass in x danach 9 steht. x ist aber 6, da foo() von Class2 ausgeführt wird und nicht foo() von Class1, welches das foo() von Base wäre. Gibt es eine andere Möglichkeit den Kontext in dem der Code ausgeführt zu ändern als</p>
<pre><code class="language-cpp">class Class1 : public Base
{
public:
	virtual void bar() { Class1::foo(); }
};
</code></pre>
<p>zu schreiben? Sonst müsste ich ja in jeder Klasse die Funktionen so umschreiben, dass explizit nur die eigenen genommen werden, falls irgendeine Klasse von dieser erbt, ihre Funktion aufruft, aber gleichzeitig eine andere Funktion überschrieben hat, welche dann aufgerufen wird.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101706</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Thu, 04 Aug 2011 12:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;quot;Kontext&amp;quot;problem on Thu, 04 Aug 2011 12:28:09 GMT]]></title><description><![CDATA[<p>Wenn Du die Funktion virtual machst, dann darf überschrieben werden und der Überschreiber hat recht. Dann sollst Du Dich nicht an Deine private Implementierung klammern.</p>
<p>Willst Du was eigenes haben, dann mach Dir doch was eigenes. Anderer Name, nicht virtual und gut ists. Das kannste dann aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101711</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 04 Aug 2011 12:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;quot;Kontext&amp;quot;problem on Thu, 04 Aug 2011 12:45:00 GMT]]></title><description><![CDATA[<p>ich hätte aber gerne, dass wenn ich mich in einer Klasse befinde auch die Funktionen aufgerufen werden, die für diese Klasse gelten und nicht die der aufrufenden Klasse...das sollte doch eigentlich kein exotisches Problem sein oder doch?</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101725</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Thu, 04 Aug 2011 12:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;quot;Kontext&amp;quot;problem on Thu, 04 Aug 2011 13:01:48 GMT]]></title><description><![CDATA[<p>virtual weglassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101733</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 13:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung &amp;quot;Kontext&amp;quot;problem on Thu, 04 Aug 2011 13:11:39 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<p>ich hätte aber gerne, dass wenn ich mich in einer Klasse befinde auch die Funktionen aufgerufen werden, die für diese Klasse gelten und nicht die der aufrufenden Klasse...das sollte doch eigentlich kein exotisches Problem sein oder doch?</p>
</blockquote>
<p>Dann sagste <code>Base::foo()</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101739</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 04 Aug 2011 13:11:39 GMT</pubDate></item></channel></rss>