<?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[Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition?]]></title><description><![CDATA[<p>Beides würde für den Programmierer einer Klasse die gleichen Möglichkeiten bieten, bei eomer Komposition könnte man das assoziierte Objekt zur Laufzeit austauschen, was ein klein wenig mehr Flexibilität bringen kann. Hat die Private-Vererbung auch irgend einen Vorteil, oder ist sie eigentlich komplett überflüssig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253988/bietet-private-vererbung-irgendwelche-vorteile-gegenüber-komposition</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 01:02:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253988.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Nov 2009 05:24:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 05:24:25 GMT]]></title><description><![CDATA[<p>Beides würde für den Programmierer einer Klasse die gleichen Möglichkeiten bieten, bei eomer Komposition könnte man das assoziierte Objekt zur Laufzeit austauschen, was ein klein wenig mehr Flexibilität bringen kann. Hat die Private-Vererbung auch irgend einen Vorteil, oder ist sie eigentlich komplett überflüssig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1805860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1805860</guid><dc:creator><![CDATA[Son of a Bitch]]></dc:creator><pubDate>Tue, 10 Nov 2009 05:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 07:02:38 GMT]]></title><description><![CDATA[<p>Son of a Bitch schrieb:</p>
<blockquote>
<p>Beides würde für den Programmierer einer Klasse die gleichen Möglichkeiten bieten,</p>
</blockquote>
<p>Ja, auf den ersten Blick schon.</p>
<p>Son of a Bitch schrieb:</p>
<blockquote>
<p>bei eomer Komposition könnte man das assoziierte Objekt zur Laufzeit austauschen, was ein klein wenig mehr Flexibilität bringen kann.</p>
</blockquote>
<p>Ja, aber wer braucht das schon?</p>
<p>Son of a Bitch schrieb:</p>
<blockquote>
<p>Hat die Private-Vererbung auch irgend einen Vorteil, oder ist sie eigentlich komplett überflüssig?</p>
</blockquote>
<p>Bei Vererbung werden alle neuen Sachen automatisch reingeerbt. Das ist eine sehr starke Bindung. Man muß schon viel Mut haben, um die einzugehen.<br />
Allgemein kann man sagen, daß private Erblichkeit Quatsch ist. Sie wird nur angestrengt, um Schwächen der Sprache zu umgehen oder auszunutzen, zum Bleistift die Empty Member Optimization. Manche Anfänger benutzen private Erblichkeit sogar, um drei oder vier triviale einzeilige Forwarder nicht tippen zu müssen.</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1805873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1805873</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 10 Nov 2009 07:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 09:02:02 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>...<br />
Allgemein kann man sagen, daß private Erblichkeit Quatsch ist....</p>
</blockquote>
<p><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="😃"
    /> <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="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Das ist mal eine prägnante Aussage, die man sich gut merken kann.</p>
<p>Danke,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1805894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1805894</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 10 Nov 2009 09:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 09:53:19 GMT]]></title><description><![CDATA[<p>Simon soo pauschal sollte man sich das nicht merken - wenn dann den ganzen Satz:</p>
<p>volkard schrieb:</p>
<blockquote>
<p>Allgemein kann man sagen, daß private Erblichkeit Quatsch ist. Sie wird nur angestrengt, um Schwächen der Sprache zu umgehen oder auszunutzen, zum Bleistift die Empty Member Optimization.</p>
</blockquote>
<p>Beispiele solcher Dinge wo private Vererbung sind machen <em>kann</em>:<br />
- EBCO (wie schon genannt)<br />
- Zugriff auf protected Member/Methoden der Basisklasse<br />
- Überladen von virtuellen Methoden und Zugriffsgewährung an ausgesuchte Klassen (ich glaub Sutter nennts &quot;controlled polymorphism&quot;):</p>
<pre><code class="language-cpp">class Base
{
  virtual void foo();
};

class BigBoss;

class NotReallyDerived : private Base //offiziell bin ich kein Base,...
{
  virtual void foo();
  friend class BigBoss; //... aber BigBoss darf mich als eins benutzen!
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1805913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1805913</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 10 Nov 2009 09:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 14:53:42 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Simon soo pauschal sollte man sich das nicht merken ...</p>
</blockquote>
<p>Doch ... so wie &quot;Bei Rot nicht über die Ampel&quot;.<br />
Eine gute Richtlinie, von der man nur in begründeten Ausnahmen abweicht.</p>
<p>Die &quot;Ampelregel&quot; gilt auch nicht in jedem Einzelfall - wenn z.B. der führerlose LKW auf dich zudonnert oder Du Deine in den Wehen liegende Frau nachts um 3h auf der einsamen Landstraße ins Krankenhaus bringen willst, kann es besser sein, diese Regel zu brechen.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>- wenn dann den ganzen Satz:</p>
</blockquote>
<p>Naja - für mich endet ein Satz beim nächsten Punkt... <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>Ich denke sowieso, dass es im Deutschen ein Problem mit dem Begriff &quot;im Allgemeinen&quot; gibt.<br />
Manchmal ist damit gemeint: &quot;in 90% der Fälle&quot; und manchmal (wie oft in der Mathematik) &quot;in jedem Zusammenhang&quot;. Ich habe o.G. im ersten Sinn verstanden und bin dir dankbar für Beispiele für die restlichen 10%.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806066</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 10 Nov 2009 14:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 16:00:44 GMT]]></title><description><![CDATA[<p>Naja, okay, du machst ne 90%-Regel draus. Oft wird hier im Forum aber aus sowas eine 99%-Regel gemacht wobei das restliche Prozent dann unter den Tisch fällt und es sich immer liest als wäre der allgemeine Satz die einzige unumstößliche Wahrheit <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="😉"
    /> Und dem ist eben nicht so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806108</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:00:44 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Tue, 10 Nov 2009 16:54:58 GMT]]></title><description><![CDATA[<p>Ich hatte nicht den Eindruck, dass volkard das so gemeint hatte ... aber es ist auf jeden Fall gut, dass Du das noch einmal präzisiert hast.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806144</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 10 Nov 2009 16:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Wed, 11 Nov 2009 20:35:23 GMT]]></title><description><![CDATA[<p>Abgesehen von den bereits genannten Punkten finde ich <code>private</code> -Vererbung noch praktisch, um von Dingen wie <code>boost::noncopyable</code> zu erben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806726</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Nov 2009 20:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Wed, 11 Nov 2009 23:10:01 GMT]]></title><description><![CDATA[<p>zwei weitere Punkte, entnommen aus Sutter/Alexandrescu's <em>C++ Coding Standards</em>:<br />
benutze Vererbung, wenn:<br />
- das benutze Objekt vor einer anderen Basisklasse konstruiert oder nach ihr zwerstört werden muss<br />
- es im Zusammenhang mit virtuellen Basisklassen nötig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806787</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 11 Nov 2009 23:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 17:34:46 GMT]]></title><description><![CDATA[<p>Was haltet ihr eigentlich davon, privat abzuleiten und einzelne Funktionen mittels <code>using</code> öffentlich zu machen? So verhindert man, dass das Objekt als Basisklasseninstanz angesprochen wird, kann aber andere Vorteile der Vererbung nutzen.</p>
<p>Selbst habe ich das noch nie so gemacht, allerdings auch schon bei fremden Code gesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807141</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Nov 2009 17:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 17:50:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Was haltet ihr eigentlich davon, privat abzuleiten und einzelne Funktionen mittels <code>using</code> öffentlich zu machen? So verhindert man, dass das Objekt als Basisklasseninstanz angesprochen wird, kann aber andere Vorteile der Vererbung nutzen.</p>
</blockquote>
<p>Meistens dürfte gelten: Dazu müßte eigentlich gelten Derived IST EIN Base. Anderenfalls müßte man immer stets ununterbrpchen aufpassen, ob das geusingte noch gültig ist. Und wenn man eh IST EIN hat, kann man auch gleich öffentlich erben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807152</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 12 Nov 2009 17:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 18:32:02 GMT]]></title><description><![CDATA[<p>Kann es nicht sinnvoll sein, auf diese Weise Codeduplizierung zu vermeiden? Oder hältst du eine Aggregation immer für angebrachter?</p>
<p>Ein ausgedachtes Beispiel: Zwei Klassen in einem GUI-Framework, <code>Panel</code> und <code>Window</code> . <code>Panel</code> ist eine Unterteilung des Fensters und kann selber beliebige GUI-Komponenten (auch andere <code>Panel</code> s) aufnehmen. <code>Window</code> soll das auch können, aber es muss zuoberst stehen und darf nicht als Bestandteil anderer Komponenten fungieren (darf also nicht als <code>Panel</code> behandelt werden). Deshalb könnte es privat von <code>Panel</code> erben und die gemeinsamen Funktionen öffentlich machen.</p>
<p>Hmm... Ganz sauber kommt mir das selber nicht vor, zumal hier gegen Aggregation nicht wirklich etwas spricht. <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>Ich wäre trotzdem froh um Meinungen dazu, mir fällt leider kein besseres Beispiel ein. Wenn die Beschreibung etwas ungenau war, kann ich das Beispiel gerne an einem Stück Code illustrieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807178</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Nov 2009 18:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 20:12:59 GMT]]></title><description><![CDATA[<p>Hmm. Ich würde das wahrscheinlich eher so lösen, dass ich eine Klasse <code>Container</code> definiere und dann kannst du da Window und Panel davon ableiten, da beide als Container fungieren und somit <code>Container</code> sind. (Das ist ja deine grundsätzliche Aussage oben das <code>Window</code> und <code>Panel</code> Container sind).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807236</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 12 Nov 2009 20:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 20:38:53 GMT]]></title><description><![CDATA[<p>Man kann damit Designschwächen anderer Bibliotheken ausbügeln:</p>
<p>Nämlich immer dann, wenn man eine Aggregation will, aber protected member des Objektes braucht, dann ist die private Vererbung das Einzige, was einen rettet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807244</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 12 Nov 2009 20:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 20:40:08 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Man kann damit Designschwächen anderer Bibliotheken ausbügeln</p>
</blockquote>
<p>Jup. Wohl die Hauptanwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807245</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 12 Nov 2009 20:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 20:45:37 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Hmm. Ich würde das wahrscheinlich eher so lösen, dass ich eine Klasse <code>Container</code> definiere und dann kannst du da Window und Panel davon ableiten, da beide als Container fungieren und somit <code>Container</code> sind. (Das ist ja deine grundsätzliche Aussage oben das <code>Window</code> und <code>Panel</code> Container sind).</p>
</blockquote>
<p><code>Panel</code> würde aber von einer zusätzlichen (abstrakten) Basisklasse für alle GUI-Komponenten erben, sagen wir <code>Component</code> . Elementare Komponenten (nennen wir sie Widgets) wie Schaltflächen werden ebenfalls von dieser Klasse abgeleitet.</p>
<p>Wäre hier Mehrfachvererbung angebracht?</p>
<pre><code>+-----------+       +-----------+
       | Container |       | Component |
       +-----------+       +-----------+
             ^                   ^
             |                   |
      +------+-------+   +-------+-------+
      |              |   |               |
+-----------+    +-----------+     +-----------+
|  Window   |    |   Panel   |     |   Widget  |
+-----------+    +-----------+     +-----------+
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1807246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807246</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Nov 2009 20:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 20:53:01 GMT]]></title><description><![CDATA[<p>Ja, Mehrfachvererbung empfinde ich durchaus als einen guten Lösungsansatz. (Potentiell gibt es sogar noch mehr, von denen du erben kannst, wenn man wirklich eine GUI Library erstellt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807250</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 12 Nov 2009 20:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Thu, 12 Nov 2009 21:16:11 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Potentiell gibt es sogar noch mehr, von denen du erben kannst, wenn man wirklich eine GUI Library erstellt.</p>
</blockquote>
<p>Ich will nicht eine komplette GUI schreiben, eher was Kleines für SFML, vor allem für alltägliche Dinge. Erweitern kann ich es immer noch. Gerade auch deshalb habe ich mir vorgenommen, von Anfang an auf schönes Design zu achten.</p>
<p>Klar könnte man noch mehr machen. Ich versuche aber, allzu tiefe Klassenhierarchien zu vermeiden und die Zusammenhänge - sofern es geht - einfach zu halten. Im Gegensatz zu vielen GUIs in C++ möchte ich dem Anwender auch die Möglichkeit geben, die Komponenten selbst zu verwalten. Also vorerst nichts mit Pseudo-Garbage-Collector. <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>Das mit dem <code>Container</code> muss ich mir noch überlegen. So eine abstrakte Basisklasse macht vor allem Sinn, wenn man verschiedene abgeleitete Klassen gemeinsam ansprechen will, dafür fehlen mir gerade Anwendungsfälle. Was ich mir auch überlege, ist eine Aggregation, also dass das Fenster ein Standard-Panel besitzt (das eben das ganze Fenster ausfüllen würde). Um an diesem Änderungen vorzunehmen, könnte ich entweder Methoden wrappen, eine Referenz auf das interne Panel zurückgeben (nicht besonders sauber) oder eben private Vererbung benutzen. Letzteres scheint mir aber wie gesagt ebenfalls nicht ganz das Wahre zu sein...</p>
<p>Oder ich lasse den Benutzer das Panel selbst erstellen und verweise im Fenster lediglich darauf. Somit ist er flexibler. Das ist allerdings mühsam, weil man zu jedem Fenster gleich ein Panel erstellen muss, um es überhaupt benutzen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807257</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Nov 2009 21:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 11:53:10 GMT]]></title><description><![CDATA[<p>Die Sache mit der privaten Vererbung, um dann einfach per using die geerbten Methoden zu veröffentlichen ist natürlich sehr verlockend, weil man dann nicht die ganzen Methoden nach Schema F definieren und an das Member durchreichen muss. Die Semantik sit wie volkard gesagt hat aber eben eine ganz andere.<br />
Für sowas würde ich mir ein neues Sprachelement wünschen:</p>
<pre><code class="language-cpp">class A
{
  int foo();
  char foo(int i);
  string bar(int a, bool b, char c);
};

//böse:
class B : private A
{
public:
  using A::foo;
  using A::bar;
};

//richtig, aber aufwändig und langatmig:
class C
{
  A theA;
public:
  int foo() { return theA.foo(); }
  char foo(int i) { return theA.foo(i); }
  string bar(int a, bool b, char c) { return theA.bar(a,b,c); }
};

//schön wärs:
class D
{
  A theA;
public:
  expose theA.foo;
  expose theA.bar;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1807470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807470</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 13 Nov 2009 11:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 17:41:21 GMT]]></title><description><![CDATA[<p>Ich finde es nicht nachvollziehbar, sich im Falle <em>privater</em> Vererbung mit der Definition &quot;IST-EIN&quot; aufzuhalten und dann von diesem Standpunkt aus private Vererbung zu beurteilen.</p>
<p>Im Falle öffentlicher Vererbung halte ich IST-EIN für ein brauchbares Kriterium, bei privater Vererbung aber ist es Unsinn. Wie wäre es stattdessen mit IST-IMPLEMENTIERT-MIT (oder ähnlichem)? Dann wäre auch an Nexus' Vorschlag der Übernahme von Funktionen privater Oberklassen per using nur noch wenig auszusetzen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a></p>
<p>Der Sinn von expose erschließt sich mir nicht. Was ist der Vorteil gegenüber der using-Lösung? Abgesehen halt vom IST-EIN-&quot;Problem&quot;.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807656</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 13 Nov 2009 17:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 17:55:59 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Ich finde es nicht nachvollziehbar, sich im Falle <em>privater</em> Vererbung mit der Definition &quot;IST-EIN&quot; aufzuhalten und dann von diesem Standpunkt aus private Vererbung zu beurteilen.<br />
Im Falle öffentlicher Vererbung halte ich IST-EIN für ein brauchbares Kriterium, bei privater Vererbung aber ist es Unsinn. Wie wäre es stattdessen mit IST-IMPLEMENTIERT-MIT (oder ähnlichem)? Dann wäre auch an Nexus' Vorschlag der Übernahme von Funktionen privater Oberklassen per using nur noch wenig auszusetzen.</p>
</blockquote>
<p>der main() kannst du sowas meinetwegen erzählen. aber glaubt die erbende klasse das denn auch? klares nein.<br />
und wozu erben, wenn's nicht not tut? das übt doch nur unnötig druck auf die klassenhierarchie (taxonomie!) aus und führt dann zu mehrfachen erblichkeitsproblemen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807666</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 13 Nov 2009 17:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 18:24:57 GMT]]></title><description><![CDATA[<p>Ich hab letztens private Vererbung hierfür eingesetzt:</p>
<pre><code class="language-cpp">class ENTITYSYSTEM_API EntityManager : private MessageClient { ... };
</code></pre>
<pre><code class="language-cpp">class ENTITYSYSTEM_API MessageClient : boost::noncopyable {

protected:
	// Subscribes to receive messages of a specific type.
	void Subscribe(const MessageType&amp;);

	// Unsubscribes to receive messages of a specific type.
	void Unsubscribe(const MessageType&amp;);

	// Processes a received message. It is guaranteed that no message is received in which this
	// message client is not interested.
	virtual void ProcessMessage(const Message&amp;) = nullptr;

};
</code></pre>
<p>Die Idee hier ist, dass der EntityManager am Message-System teilnehmen möchte, hierzu muss er eine virtuelle Methode overriden. Es ist aber keinesfalls gewünscht, dass jemand von außen den EntityManager für irgendwas subscriben kann, sondern der EntityManager weiß selber genau, was für Messages er braucht.</p>
<p>Daher fällt öffentliche Vererbung aus. Komposition wäre umständlich, ich müsste erst von MessageClient ableiten und eine Instanz dieser konkreten Klasse als member aufnehmen. Daher finde ich das hier eine brauchbare Lösung (andere Meinungen mit Begründung sind willkommen).</p>
<p>Trotzdem zieht man im Allgemeinen Komposition natürlich vor. Schlauerweise nimmt man immer die schwächste Verbindung, die noch sinnvoll ist, also Aggregation, Komposition, Vererbung und nur zuletzt friend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807681</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Nov 2009 18:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 18:37:22 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">virtual void ProcessMessage(const Message&amp;) = nullptr;
</code></pre>
</blockquote>
<p>Da ist auch nullptr erlaubt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807685</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 13 Nov 2009 18:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 18:46:10 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Ich hab letztens private Vererbung hierfür eingesetzt:...</p>
</blockquote>
<p>Alternativ könnte man überlegen, nicht nur Empfängerobjekte zu registrieren, die je nach Nachricht eine bestimmte virtuelle Funktion anbieten müssen, sondern beliebige Objekte/Methodenzeiger-Paare registrieren zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807690</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 13 Nov 2009 18:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 19:12:11 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Ich finde es nicht nachvollziehbar, sich im Falle <em>privater</em> Vererbung mit der Definition &quot;IST-EIN&quot; aufzuhalten und dann von diesem Standpunkt aus private Vererbung zu beurteilen.</p>
<p>Im Falle öffentlicher Vererbung halte ich IST-EIN für ein brauchbares Kriterium, bei privater Vererbung aber ist es Unsinn. Wie wäre es stattdessen mit IST-IMPLEMENTIERT-MIT (oder ähnlichem)?</p>
</blockquote>
<p>Dann schon &quot;IST-IMPLEMENTIERT-MIT-UND-FÜR-SICH-SELBST-UND-IM-KREISE-DER-FREUNDE-IST-EIN&quot; - für sich selbst und für alle friends gilt nunmal die Ist-Ein-Beziehung. Und die wegzudiskutieren hilft auch nicht dagegen dass es semantisch eben etwas anderes ist als Aggregation.</p>
<p>DStefan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a></p>
<p>Der Sinn von expose erschließt sich mir nicht. Was ist der Vorteil gegenüber der using-Lösung? Abgesehen halt vom IST-EIN-&quot;Problem&quot;.</p>
</blockquote>
<p>Eben. Abgesehn von der Typsicherheit kann man auch Makros an Stelle vieler Templates benutzen. Man kann für viele Schwächen der Sprache Workarounds finden, die super funktionieren auch wenn sie eigentlich was anderes bedeuten.</p>
<p>btw:</p>
<pre><code class="language-cpp">class E
{
  A someA;
  A anotherA;
public:
  expose someA.foo;
  expose anotherA.bar;
};
</code></pre>
<p>nicht machbar mit Vererbung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807703</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 13 Nov 2009 19:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bietet Private-Vererbung irgendwelche Vorteile gegenüber Komposition? on Fri, 13 Nov 2009 19:47:21 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Optimizer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">virtual void ProcessMessage(const Message&amp;) = nullptr;
</code></pre>
</blockquote>
<p>Da ist auch nullptr erlaubt?</p>
</blockquote>
<p>Ich hoffe es. Im Moment ist es nur ein #define.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1807715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1807715</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Nov 2009 19:47:21 GMT</pubDate></item></channel></rss>