<?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[in Klassen Eltern-Funktion durch Kind ersetzten?]]></title><description><![CDATA[<p>hi,</p>
<p>ich möchte eine Erweiterung zu einem Softwareprojekt schreiben. Den offiziellen Code möchte ich daher wenn möglich aus Gründen der Wartbarkeit nicht umschreiben. Ich habe mein Problem mit dem nachstehenden Code skizziert: die Klasse parent soll nicht verändert werden, ich habe eine abgeleitete Klasse child implementiert, die einige Erweiterungen zu parent hinzufügt. Den Nutzer wählt dann aus, die child-Klasse verwenden zu wollen. Wenn nun aber jemand die big_function() aufruft, werden im Laufe sehr vieler Codezeilen einige Funktionen, wie zB die helper() aufgerufen. Ich möchte nun die parent::helper() durch child::helper() ersetzen. Leider ruft die parent::big_function() auch die parent::helper() auf, und nicht die der abgeleiteten child-Klasse. Gibt es eine andere Lösung, als den langen Code von parent::big_function() per copy-and-paste in meine child-Klasse zu übernehmen, um die helper-Funktion zu ersetzen, ohne parent zu ändern?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class parent
{
	public:
	void helper() {cout&lt;&lt;&quot;parent helper&quot;&lt;&lt;endl;}
	void big_function() {cout&lt;&lt;&quot;parent big_function&quot;&lt;&lt;endl; helper();}
	void other_functionallity();
};

class child : public parent
{
	public:
	void helper() {cout&lt;&lt;&quot;child helper&quot;&lt;&lt;endl;}
};

int main()
{
	child c;
	c.big_function();
	return 0;
}
</code></pre>
<p>dankbar für Anregungen,<br />
Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255908/in-klassen-eltern-funktion-durch-kind-ersetzten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 19:02:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255908.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Dec 2009 13:05:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to in Klassen Eltern-Funktion durch Kind ersetzten? on Sat, 05 Dec 2009 13:05:47 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich möchte eine Erweiterung zu einem Softwareprojekt schreiben. Den offiziellen Code möchte ich daher wenn möglich aus Gründen der Wartbarkeit nicht umschreiben. Ich habe mein Problem mit dem nachstehenden Code skizziert: die Klasse parent soll nicht verändert werden, ich habe eine abgeleitete Klasse child implementiert, die einige Erweiterungen zu parent hinzufügt. Den Nutzer wählt dann aus, die child-Klasse verwenden zu wollen. Wenn nun aber jemand die big_function() aufruft, werden im Laufe sehr vieler Codezeilen einige Funktionen, wie zB die helper() aufgerufen. Ich möchte nun die parent::helper() durch child::helper() ersetzen. Leider ruft die parent::big_function() auch die parent::helper() auf, und nicht die der abgeleiteten child-Klasse. Gibt es eine andere Lösung, als den langen Code von parent::big_function() per copy-and-paste in meine child-Klasse zu übernehmen, um die helper-Funktion zu ersetzen, ohne parent zu ändern?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class parent
{
	public:
	void helper() {cout&lt;&lt;&quot;parent helper&quot;&lt;&lt;endl;}
	void big_function() {cout&lt;&lt;&quot;parent big_function&quot;&lt;&lt;endl; helper();}
	void other_functionallity();
};

class child : public parent
{
	public:
	void helper() {cout&lt;&lt;&quot;child helper&quot;&lt;&lt;endl;}
};

int main()
{
	child c;
	c.big_function();
	return 0;
}
</code></pre>
<p>dankbar für Anregungen,<br />
Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818183</guid><dc:creator><![CDATA[Lawilog]]></dc:creator><pubDate>Sat, 05 Dec 2009 13:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen Eltern-Funktion durch Kind ersetzten? on Sat, 05 Dec 2009 13:14:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class parent
{
    public:
    // Stichwort: virtuelle Methoden
    virtual void helper() {cout&lt;&lt;&quot;parent helper&quot;&lt;&lt;endl;}
    void big_function() {cout&lt;&lt;&quot;parent big_function&quot;&lt;&lt;endl; helper();}
    void other_functionallity();
};
</code></pre>
<p>Edit: Oh sorry - hab überlesen, dass du Parent nicht ändern wolltest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818185</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 05 Dec 2009 13:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen Eltern-Funktion durch Kind ersetzten? on Sat, 05 Dec 2009 13:15:25 GMT]]></title><description><![CDATA[<p>Da <code>parent::helper()</code> offensichtlich nicht virtuell ist, scheint die Klasse wohl eher nicht für Vererbung vorgesehen zu sein (oder zumindest nicht, sodass diese Methode überschrieben wird). Besitzt die Klasse <code>parent</code> einen virtuellen Destruktor?</p>
<p>Ich sehe leider auch nicht gerade eine Möglichkeit ausser Copy&amp;Paste, die Methode in <code>parent</code> ist schliesslich fix. Gibt es keine sinnvolle Aufteilung wie z.B. die folgende (evtl. mehrere kleinere Aufrufe statt <code>do_big_actions()</code> )? Greift <code>big_function()</code> auf private Member zu?</p>
<pre><code class="language-cpp">void parent::big_function()
{
    do_big_actions();
    helper();
}
</code></pre>
<p>@ daersc: Er will <code>parent</code> nicht verändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818186</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 05 Dec 2009 13:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen Eltern-Funktion durch Kind ersetzten? on Sat, 05 Dec 2009 13:34:53 GMT]]></title><description><![CDATA[<p>Danke für die Antworten. Letztlich wird es sinnvoller sein, die Methoden als virtuell zu deklarieren. Der Wartungsaufwand ist sorum deutlich geringer. - Darüber reden hilft <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>
<p>edit: auch wenn das leider ausnahmsweise den OriginalCode verändert</p>
<p>thx,<br />
Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818195</guid><dc:creator><![CDATA[Lawilog]]></dc:creator><pubDate>Sat, 05 Dec 2009 13:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to in Klassen Eltern-Funktion durch Kind ersetzten? on Sat, 05 Dec 2009 13:38:26 GMT]]></title><description><![CDATA[<p>Falls die Klasse nicht polymorph konzipiert ist: Vergiss nicht, den Destruktor virtuell zu machen, sonst erhältst du unter Umständen undefiniertes Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1818197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1818197</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 05 Dec 2009 13:38:26 GMT</pubDate></item></channel></rss>