<?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[Delegation vs. Implementationsvererbung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hänge gerade an einer Aufgabe und deren Lösung fest: Es soll ein Stack-Template basierend auf einer allgemeinen Klasse Liste geschrieben werden.<br />
Von der Oberklasse poste ich mal nur die Schnittstellen. Ich denke, das reicht.</p>
<pre><code class="language-cpp">template&lt;class T&gt; 
class Liste {
    public:
      Liste();
      Liste(const Liste&amp;);
      ~Liste();
      Liste&amp; operator=(const Liste&amp;);

      bool empty() const { return anzahl == 0;}
      int size()   const { return anzahl;}

      // am Anfang bzw. Ende einfügen
      void push_front(const T&amp;);
      void push_back(const T&amp;);

      // am Anfang bzw. Ende löschen
      void pop_front();
      void pop_back();

      // am Anfang bzw. Ende lesen
      T&amp;       front();
      const T&amp; front() const;
      T&amp;       back();
      const T&amp; back() const;

      // anwenden der Funktion {\tt f()} auf alle Elemente
      void anwenden(void(*f)(const T&amp;)) const;

    private:
      struct Listenelement { 
         friend class Liste&lt;T&gt;;
         T daten;
         Listenelement *naechstes, *vorgaenger;
         Listenelement(const T&amp; dat)
         : daten(dat), naechstes(NULL), vorgaenger(NULL) {}
        private:
         // private, um versehentliche Benutzung zu verhindern
         Listenelement(const Listenelement&amp;);
         void operator=(const Listenelement&amp;);
      };

      Listenelement *ende, *anfang;
      size_t anzahl;
};
</code></pre>
<p>Wie man sehen kann, benutzt die Klasse &quot;Liste&quot; eine Struktur &quot;Listenelement&quot; zur internen Speicherung.<br />
Nun das Template der Stack-Klasse:</p>
<pre><code class="language-cpp">#ifndef STACK_T
#define STACK_T
#include &quot;liste.t&quot;

template&lt;class T&gt;
class Stack : private Liste&lt;T&gt; {
	public:
		using Liste&lt;T&gt;::empty;
		using Liste&lt;T&gt;::size;

		void push(const T&amp;);
		void pop(void);
		const T&amp; top(void) const;
		T&amp; top(void);
};

void Stack&lt;T&gt;::push(const T&amp; x) {
	Liste&lt;T&gt;::push_front(x);
}

void Stack&lt;T&gt;::pop() {
	Liste&lt;T&gt;::pop_front();
}

const T&amp; Stack&lt;T&gt;::top() const {
	Liste&lt;T&gt;::front();
}

T&amp; Stack&lt;T&gt;::top() const {
	Liste&lt;T&gt;::front();
}

#endif
</code></pre>
<p>Das war meine Lösung. Wie ihr sehen könnt, produziert sie leider einige Fehler zu viel, um durch den Compiler zu kommen.</p>
<p>Die abgedruckte Lösung war diese:</p>
<pre><code class="language-cpp">#ifndef STACK_T
#define STACK_T
#include &quot;liste.t&quot;

template&lt;class T&gt;
class Stack {
    public:
      bool empty() const     { return liste.empty();}
      int size()   const     { return liste.size();}
      // am Anfang einfügen und entnehmen
      void push(const T&amp; x)  { liste.push_front(x);}
      void pop()             { liste.pop_front();}
      // am Anfang lesen
      T&amp;       top()         { return liste.front();}
      const T&amp; top() const   { return liste.front();}
    private:
      Liste&lt;T&gt; liste;
};
#endif
</code></pre>
<p>So, jetzt zum Kern des Problems...<br />
Im Kapitel zur privaten Vererbung steht, dass Delegation (wie in der Musterlösung) und Implementationsvererbung/private Vererbung (meine Variante) beides Möglichkeiten zur Wiederverwendung von Code seien. Delegation würde allerdings bevorzugt. Da jedoch schon ein weiteres Beispiel einer delegierenden Klasse angegeben war, wollte ich die private Vererbung mal ausprobieren. Leider ohne Erfolg...</p>
<p>Ist das Ganze weitgehend äquivalent und hab ich nur 'nen Fehler gemacht oder lieg ich hier total daneben?</p>
<p>Danke für eure Antworten. <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>~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193910/delegation-vs-implementationsvererbung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 08:22:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193910.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Oct 2007 15:51:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 15:51:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hänge gerade an einer Aufgabe und deren Lösung fest: Es soll ein Stack-Template basierend auf einer allgemeinen Klasse Liste geschrieben werden.<br />
Von der Oberklasse poste ich mal nur die Schnittstellen. Ich denke, das reicht.</p>
<pre><code class="language-cpp">template&lt;class T&gt; 
class Liste {
    public:
      Liste();
      Liste(const Liste&amp;);
      ~Liste();
      Liste&amp; operator=(const Liste&amp;);

      bool empty() const { return anzahl == 0;}
      int size()   const { return anzahl;}

      // am Anfang bzw. Ende einfügen
      void push_front(const T&amp;);
      void push_back(const T&amp;);

      // am Anfang bzw. Ende löschen
      void pop_front();
      void pop_back();

      // am Anfang bzw. Ende lesen
      T&amp;       front();
      const T&amp; front() const;
      T&amp;       back();
      const T&amp; back() const;

      // anwenden der Funktion {\tt f()} auf alle Elemente
      void anwenden(void(*f)(const T&amp;)) const;

    private:
      struct Listenelement { 
         friend class Liste&lt;T&gt;;
         T daten;
         Listenelement *naechstes, *vorgaenger;
         Listenelement(const T&amp; dat)
         : daten(dat), naechstes(NULL), vorgaenger(NULL) {}
        private:
         // private, um versehentliche Benutzung zu verhindern
         Listenelement(const Listenelement&amp;);
         void operator=(const Listenelement&amp;);
      };

      Listenelement *ende, *anfang;
      size_t anzahl;
};
</code></pre>
<p>Wie man sehen kann, benutzt die Klasse &quot;Liste&quot; eine Struktur &quot;Listenelement&quot; zur internen Speicherung.<br />
Nun das Template der Stack-Klasse:</p>
<pre><code class="language-cpp">#ifndef STACK_T
#define STACK_T
#include &quot;liste.t&quot;

template&lt;class T&gt;
class Stack : private Liste&lt;T&gt; {
	public:
		using Liste&lt;T&gt;::empty;
		using Liste&lt;T&gt;::size;

		void push(const T&amp;);
		void pop(void);
		const T&amp; top(void) const;
		T&amp; top(void);
};

void Stack&lt;T&gt;::push(const T&amp; x) {
	Liste&lt;T&gt;::push_front(x);
}

void Stack&lt;T&gt;::pop() {
	Liste&lt;T&gt;::pop_front();
}

const T&amp; Stack&lt;T&gt;::top() const {
	Liste&lt;T&gt;::front();
}

T&amp; Stack&lt;T&gt;::top() const {
	Liste&lt;T&gt;::front();
}

#endif
</code></pre>
<p>Das war meine Lösung. Wie ihr sehen könnt, produziert sie leider einige Fehler zu viel, um durch den Compiler zu kommen.</p>
<p>Die abgedruckte Lösung war diese:</p>
<pre><code class="language-cpp">#ifndef STACK_T
#define STACK_T
#include &quot;liste.t&quot;

template&lt;class T&gt;
class Stack {
    public:
      bool empty() const     { return liste.empty();}
      int size()   const     { return liste.size();}
      // am Anfang einfügen und entnehmen
      void push(const T&amp; x)  { liste.push_front(x);}
      void pop()             { liste.pop_front();}
      // am Anfang lesen
      T&amp;       top()         { return liste.front();}
      const T&amp; top() const   { return liste.front();}
    private:
      Liste&lt;T&gt; liste;
};
#endif
</code></pre>
<p>So, jetzt zum Kern des Problems...<br />
Im Kapitel zur privaten Vererbung steht, dass Delegation (wie in der Musterlösung) und Implementationsvererbung/private Vererbung (meine Variante) beides Möglichkeiten zur Wiederverwendung von Code seien. Delegation würde allerdings bevorzugt. Da jedoch schon ein weiteres Beispiel einer delegierenden Klasse angegeben war, wollte ich die private Vererbung mal ausprobieren. Leider ohne Erfolg...</p>
<p>Ist das Ganze weitgehend äquivalent und hab ich nur 'nen Fehler gemacht oder lieg ich hier total daneben?</p>
<p>Danke für eure Antworten. <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>~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376090</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 01 Oct 2007 15:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 19:10:18 GMT]]></title><description><![CDATA[<p>delegation ist immer dann vorzuziehen, wenn durch vererbung methoden sichtbar würden, die das konzept der oberklasse unterwandern würden.<br />
in deinem beispiel soll ein stack implementiert werden, der intern eine liste verwendet. eine liste bietet methoden, die mit einem stack nicht vereinbar sind (random access und co.). durch private vererbung kann man natürlich die nicht &quot;benötigten&quot; methoden verbergen, aber nach außen signalisiert man so, dass ein stack im grunde eine liste sei, der lediglich einige methoden fehlen. das steht in starkem kontrast zum konzept der polymorphie, dass tochterklassen sich auch wie oberklassen verhalten können.<br />
aus architektur sicht ist für dieses problem also delegation vorzuziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376173</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 01 Oct 2007 19:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 19:58:17 GMT]]></title><description><![CDATA[<p>Erstmal danke für deine Erklärungen. <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>Nur damit ich das richtig verstehe: Durch meine private-Vererbung werden erstmal alle public und protected Methoden und Attribute zu private Attributen der Unterklasse. Mit &quot;public: using Liste&lt;T&gt;::empty;&quot; kann ich dann 'ne Oberklassenmethode wieder public für die abgeleitete Klasse nutzbar machen. Soweit richtig? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Wenn ich jetzt aber keinen Krampf mach und keine ungültigen Methoden der Basisklasse für den Stack übernehme, ist private Vererbung doch auch ok, oder? Werde in Zukunft soweit möglich Delegationen benutzen, wie's mir die Seite hier empfiehlt. (<a href="http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.1" rel="nofollow">http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.1</a>)</p>
<p>Hab's jetzt auch geschafft, das Ganze zu kompilieren. Das Problem war nur, dass der Template-Platzhalter T der Oberklasse außerhalb der Klassendeklaration der Unterklasse nicht bekannt war. Implementierungen in die Deklaration gesteckt und es funktioniert. <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/1376198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376198</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 01 Oct 2007 19:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 20:58:21 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>durch private vererbung kann man natürlich die nicht &quot;benötigten&quot; methoden verbergen, aber nach außen signalisiert man so, dass ein stack im grunde eine liste sei, der lediglich einige methoden fehlen. das steht in starkem kontrast zum konzept der polymorphie, dass tochterklassen sich auch wie oberklassen verhalten können.</p>
</blockquote>
<p>Is doch wurscht wenn man private ableitet, an die Superklasse kommst du ja bei private Vererbung (von aussen) nicht dran.</p>
<p>Weder Slicing noch Casten noch implizite Konvertierung funktionieren -- von daher sehe ich kein Problem.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16525">@moagnus</a>:<br />
Du hast ein const zuviel geschrieben (T&amp; Stack&lt;T&gt;::top() const &lt;- das gehört weg), und 2x return vergessen. Rest sieht OK aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376229</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 01 Oct 2007 20:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 21:10:59 GMT]]></title><description><![CDATA[<p>Ja hast Recht, bisschen Quatsch gebaut... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376236</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Mon, 01 Oct 2007 21:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Mon, 01 Oct 2007 21:28:19 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Is doch wurscht wenn man private ableitet, an die Superklasse kommst du ja bei private Vererbung (von aussen) nicht dran.</p>
</blockquote>
<p>das stimmt schon, aber ich halte das konzept der privaten vererbung eh für ne krücke. vererbung sollte immer public sein, weil vererbung eine semantische beziehung darstellen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376242</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 01 Oct 2007 21:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 06:02:27 GMT]]></title><description><![CDATA[<p>Nein, es gibt schon einige Fälle, in denen private Vererbung nützlich sein kann (vor allem im Bezug mit virtuellen Methoden oder protected-Elementen).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16525">@moagnus</a>: Nur für's nächste Mal - du solltest auch dazuschreiben, welche Fehler du bekommst, das erleichtert es uns, dir hilfreiche Tips zu geben <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>(btw: Listenelement ist privat in Liste&lt;&gt; und darum außerhalb der Klasse nicht verwendbar. Da ist es egal, wie du die Zugriffsrechte setzt ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376291</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 06:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 07:38:59 GMT]]></title><description><![CDATA[<p>stack sollte wenn möglich nicht von liste erben</p>
<p>am besten wäre es, das ganze wie einen stl adapter aufzubauen</p>
<p>die bekommen die darunterliegende implementation als template parameter, und dann kann man einen stack einfach per list/vector/dequeue implementieren lassen, je nachdem was man grade gut gebauchen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376317</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Tue, 02 Oct 2007 07:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 11:05:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Jepp, hast Recht. Ich wollte allerdings erstmal wissen, ob das prinzipiell funktioniert. Danach hätte ich euch an meinen Codeproblemen teilhaben lassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<blockquote>
<p>stack sollte wenn möglich nicht von liste erben</p>
</blockquote>
<p>Wo liegt das Problem, wenn doch per Vererbung bzw. Delegation ungültige Methoden umgangen/ausgeblendet werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376454</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Tue, 02 Oct 2007 11:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 11:14:01 GMT]]></title><description><![CDATA[<p>Scott Meyers beschreibt private Vererbung als &quot;ist implementiert in Form von&quot;. Wenn man betrachtet, welche Möglichkeiten man mit einer privaten Basisklasse hat, kann man sie im Grunde auch als Member mit etwas anderer Semantik sehen. Man hat auch nicht wesentlich mehr Schreibarbeit, wenn man dieses Objekt als Member implementiert.</p>
<p>Deshalb plädiere ich ebenfalls dafür, solche Beziehungen nur dann über private Vererbung zu lösen, wenn es nicht anders geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376458</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 02 Oct 2007 11:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 11:55:59 GMT]]></title><description><![CDATA[<p>moagnus schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Jepp, hast Recht. Ich wollte allerdings erstmal wissen, ob das prinzipiell funktioniert. Danach hätte ich euch an meinen Codeproblemen teilhaben lassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Dann ist ein &quot;wie man sieht, produziert das einige Fehler&quot; nicht gerade die richtige Art, auf dein Problem hinzuweisen <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>
<blockquote>
<p>stack sollte wenn möglich nicht von liste erben</p>
</blockquote>
<p>Wo liegt das Problem, wenn doch per Vererbung bzw. Delegation ungültige Methoden umgangen/ausgeblendet werden?[/quote]Die private Vererbung ist hier unnötig, weil Stack keinen Zugriff auf Features braucht, die außerhalb der öffentlichen Liste-Schnittstelle liegen. Außerdem schaffst du dir damit nur unnötige Abhängigkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376485</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 11:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 13:19:07 GMT]]></title><description><![CDATA[<p>Grundsätzlich ist diese Frage eine nach der besseren Implementation. Beide Varianten haben - wie bereits diskutiert wurde - keinen Einfluss auf des Interface einer Klasse, Fragen etwa wie die nach Polymorphie spielen demzufolge keine Rolle.</p>
<p>Tatsächlich hat einfache private Vererbung (bei Mehrfachvererbung entstehen ganz andere Probleme um die es hier ja nicht gehen soll) potentiell einige Vorteile:<br />
- Falls die die Basisklasse am Ende Padding aufweist, kann dieser Speicher für Member in der abgeleiteten Klasse genutzt werden, somit wird das Gesamtobjekt ggf. kleiner.<br />
- Alle Funktionen, die per using nutzbar gemacht werden, sind unmittelbar die der Basisklasse. das bedeutet bei Templates weniger instantiierte Funktionen und mag in manchen Fällen zu besserem inlining führen, da Compiler dort üblicherweise ein Limit haben hinsichtlich verschachtelter Funktionsaufrufe.</p>
<p>Auf der anderen Seite wird der Code mit Vererbung an manchen Stellen etwas schlechter lesbar, weil wir dort, wo wir eine Funktion in der abgeleiteten Klasse durch eine gleichen Namens ersetzen, mit Casts oder qualifizierten Bezeichnern arbeiten müssen, wo sonst einfach ein Member stehen würde.</p>
<p>Ich kann nicht erkennen, das eine Variante zu größeren Abhängigkeiten als die Andere führt.</p>
<p>So gesehen, kann ich hier keine klare Empfehlung für oder gegen private Vererbung ableiten: das muss eine Entscheidung des Einzelfalls sein, je nachdem wie diese sich auf die Qualität der Implementation dann konkret auswirkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376558</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 02 Oct 2007 13:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 15:17:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Also gut, ich geb mich geschlagen... Mir fällt keine Ausrede mehr ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ansonsten... danke für die Antworten. Ich dachte mir schon, dass ich bei dem Thema nicht unbedingt 'ne Pauschallösung fordern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376686</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 20:09:55 GMT]]></title><description><![CDATA[<p>Also... ich sag mal einfach so: bevor ich 10x weiterleite schreib ich lieber 10x using. In so einem Fall werde ich privat ableiten.<br />
Wenn ich kein einziges using oder vielleicht nur 1-2 zusammenbekomme ... werde ich es vielleicht eher mit einem Member machen.</p>
<p>Die einzige &quot;Abhängigkeit&quot; bzw. Gefahr die ich beim privat Ableiten sehe ist: wenn die Basisklasse nicht &quot;stabil&quot; ist, dann kann das &quot;using&quot; zu einem Problem werden: es werden halt alle Overloads sichtbar gemacht, auch ggf. neue die man garnicht haben wollte als man die Klasse programmiert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376867</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 02 Oct 2007 20:09:55 GMT</pubDate></item><item><title><![CDATA[Reply to Delegation vs. Implementationsvererbung on Tue, 02 Oct 2007 21:58:17 GMT]]></title><description><![CDATA[<p>Hm, das ist aber jetzt schon ziemlich speziell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376915</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Tue, 02 Oct 2007 21:58:17 GMT</pubDate></item></channel></rss>