<?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[!(B* -&amp;gt; A*)]]></title><description><![CDATA[<p>Ich habe eine Klasse B die das public Interface von A übernehmen soll, aber es soll keine implizite Konvertierung zwischen B* und A* stattfinden. Wie mache ich das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310870/b-gt-a</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 05:35:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310870.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Nov 2012 16:16:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:16:54 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse B die das public Interface von A übernehmen soll, aber es soll keine implizite Konvertierung zwischen B* und A* stattfinden. Wie mache ich das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273126</guid><dc:creator><![CDATA[anon4354645]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:22:52 GMT]]></title><description><![CDATA[<p>Das schreit nach einem Design Fehler und du verletzt somit das <a href="http://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip" rel="nofollow">LSP</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273129</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:27:06 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Das schreit nach einem Design Fehler und du verletzt somit das <a href="http://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip" rel="nofollow">LSP</a>.</p>
</blockquote>
<p>Ich verletzte damit gerade deshalb nichts, weil ich keine &quot;is-a&quot; Beziehnung modellieren will. Ich will nur Tipparbeit sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273130</guid><dc:creator><![CDATA[anon4354645]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:27:06 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:33:13 GMT]]></title><description><![CDATA[<p>doch das tust du, ansonsten würdest du eben nicht public erben wollen, denn genau das sagt öffentlich verbung ja aus -&gt; is-a</p>
<p>wenn es dir nur um die implementierung geht nimm private vererbung oder komposition</p>
<p>wenn es dir nur darum geht, dass z.B. alle deine klassen vom prinzip her gleich aufgebaut sind und auch alle gleiche namen haben sollen (also die methoden), bleibtdir denke ich mal nichts anderes übrig als das alls zu tippen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273135</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:33:24 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>Ich habe eine Klasse B die das public Interface von A übernehmen soll, aber es soll keine implizite Konvertierung zwischen B* und A* stattfinden. Wie mache ich das?</p>
</blockquote>
<p>Indem A und B vom gleichen Interface erben. B aber nicht von A.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273136</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:36:57 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>doch das tust du, ansonsten würdest du eben nicht public erben wollen, denn genau das sagt öffentlich verbung ja aus -&gt; is-a</p>
</blockquote>
<p>Bitte ordentlich lesen. Ich habe Vererbung nicht mal erwähnt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18674">@nurf</a> Dann habe ich das gleiche Problem wie vorher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273137</guid><dc:creator><![CDATA[anon4354645]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 16:47:11 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>doch das tust du, ansonsten würdest du eben nicht public erben wollen, denn genau das sagt öffentlich verbung ja aus -&gt; is-a</p>
</blockquote>
<p>Bitte ordentlich lesen. Ich habe Vererbung nicht mal erwähnt.</p>
</blockquote>
<p>indirekt schon, denn die beschriebene Konvertierung gibt es nur bei public-Vererbung. Skym0sh0 weiß das. Du anscheinend nicht.</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18674">@nurf</a> Dann habe ich das gleiche Problem wie vorher.</p>
</blockquote>
<p>Nope.</p>
<pre><code>class base{};

class A:public base{};
class B:public base{};

class public_derivation: public base{};
class protected_derivation: protected base{};
class private_derivation: private base{};

int main()
{
  A *a;
  B *b;
  base *base_ptr;

  a = b;  // Nö
  b = a;  // Nö
  a = base_ptr;  // Nö
  b = base_ptr;  // Nö
  base_ptr = a;  // Ja
  base_ptr = b;  // Ja

  public_derivation *public_ptr;
  protected_derivation *protected_ptr;
  private_derivation *private_ptr;

  base_ptr = public_ptr;  // Ja
  base_ptr = protected_ptr;  // Nö
  base_ptr = private_ptr;  // Nö
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2273139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273139</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Nov 2012 16:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 17:55:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>indirekt schon, denn die beschriebene Konvertierung gibt es nur bei public-Vererbung. Skym0sh0 weiß das. Du anscheinend nicht.</p>
</blockquote>
<p>Also wenn ich nach etwas mit Eigenschaft A und B Frage und mit jemand etwas mit Eigenschaft A gibt, habe ich genau danach gefragt. Gut zu wissen. Logic(!)</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Nope.</p>
</blockquote>
<p>Doch. B braucht so immer noch einen virtuellen Destruktor. (Den du irgendwie vergessen hast..)</p>
<p>Also noch mal: B soll sich verhalten wie eine eigene, normale Klasse. Ohne irgendwelche impliziten Konvertierungen oder sonst was. Es geht nur darum Tipparbeit zu sparen. Das ist das <strong>einzige</strong> was ich will. Es sollen keine tiefgründigen Abhängigkeiten modelliert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273154</guid><dc:creator><![CDATA[anon4354645]]></dc:creator><pubDate>Wed, 21 Nov 2012 17:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 18:05:37 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>Es geht nur darum Tipparbeit zu sparen.</p>
</blockquote>
<p>Copy&amp;Paste</p>
<p>Und das ist ernst gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273157</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 21 Nov 2012 18:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 18:17:51 GMT]]></title><description><![CDATA[<p>Das Problem dabei ist halt, dass Änderungen sich nicht überall gleich auswirken. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Könnte man so etwas nicht mal in die Sprache bauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273160</guid><dc:creator><![CDATA[anon4354645]]></dc:creator><pubDate>Wed, 21 Nov 2012 18:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 18:18:46 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>indirekt schon, denn die beschriebene Konvertierung gibt es nur bei public-Vererbung. Skym0sh0 weiß das. Du anscheinend nicht.</p>
</blockquote>
<p>Also wenn ich nach etwas mit Eigenschaft A und B Frage und mit jemand etwas mit Eigenschaft A gibt, habe ich genau danach gefragt. Gut zu wissen. Logic(!)</p>
</blockquote>
<p>Falls das Ironie sein soll: Fail? Dein B (es gibt implizite Konvertierung) ist äquivalent zu A (public Vererbung wurde genutzt). Daher ist es vollkommen ausreichend, von A oder B zu sprechen.</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Nope.</p>
</blockquote>
<p>Doch.</p>
</blockquote>
<p>Ähh, nein? Zeile 16,17 in meinem Beispiel.</p>
<p>Virtueller Destruktor: Wenn du keine Pointerkonvertierungen haben willst, ist wohl davon auszugehen, dass niemals im Programm base* vorkommen werden. Selbst wenn: Dann mach eben einen virtuellen Destruktor. Was spricht dagegen? Dadurch werden A* und B* auch nicht kompatibel.</p>
<blockquote>
<p>Also noch mal: B soll sich verhalten wie eine eigene, normale Klasse. Ohne irgendwelche impliziten Konvertierungen oder sonst was. Es geht nur darum Tipparbeit zu sparen. Das ist das <strong>einzige</strong> was ich will. Es sollen keine tiefgründigen Abhängigkeiten modelliert werden.</p>
</blockquote>
<p>Und inwiefern wird dies nicht durch private-Vererbung, gemeinsame Basisklasse oder Komposition erfüllt? Irgendeine Art von Modellierungsabhängigkeit muss ja bestehen, sonst können die Klassen nicht den gleichen Code benutzen. Als kleinster Nenner muss also mindestens eine &quot;ist in der gleichen Art implementiert&quot;-Beziehung vorliegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273161</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Nov 2012 18:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 18:22:01 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Falls das Ironie sein soll: Fail? Dein B (es gibt implizite Konvertierung) ist äquivalent zu A (public Vererbung wurde genutzt).</p>
</blockquote>
<p>Nur so als Anmerkung: Er wollte doch gerade <strong>keine</strong> implizite Konvertierung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273163</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 21 Nov 2012 18:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 19:39:14 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>Das Problem dabei ist halt, dass Änderungen sich nicht überall gleich auswirken. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Könnte man so etwas nicht mal in die Sprache bauen?</p>
</blockquote>
<p>Gleiches Interface für mehrere Klassen ist bereits eingebaut über Vererbung.</p>
<p>Du hast im Grunde nur 3 Möglichkeiten.</p>
<p>1. Du schaffst dir eine Basisklasse und erbst die anderen Klassen davon, die geerbten Klassen sind untereinander nicht kompatibel. Das ist die sichere und sauber Methode.</p>
<p>2. Du fängst an Macros zu bauen die die Funktion enthalten. Das würde erreichen was du willst. Ich würde dir aber davon abraten, da Macros fehleranfällig sind und der Code damit fehleranfällig wird.</p>
<p>3. Das von Shade vorgeschlagene Copy n Paste, da es sich ja um 2 vollkommen getrennte Klassen handeln soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273185</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Wed, 21 Nov 2012 19:39:14 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 20:56:12 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>1. Du schaffst dir eine Basisklasse und erbst die anderen Klassen davon, die geerbten Klassen sind untereinander nicht kompatibel. Das ist die sichere und sauber Methode.</p>
<p>2. Du fängst an Macros zu bauen die die Funktion enthalten. Das würde erreichen was du willst. Ich würde dir aber davon abraten, da Macros fehleranfällig sind und der Code damit fehleranfällig wird.</p>
<p>3. Das von Shade vorgeschlagene Copy n Paste, da es sich ja um 2 vollkommen getrennte Klassen handeln soll.</p>
</blockquote>
<p>1. finde ich nicht so sauber. sauebr fände ichs, wenn man wirklich nur allen methoden gleiche namen gibt aber keinerlei beziehung zwischen den klassen hat. und das geht leider nur mit der guttenberg taktik</p>
<p>2. da stimme ich dir voll und ganz zu</p>
<p>3. und hier auch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273215</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 21 Nov 2012 20:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 22:03:28 GMT]]></title><description><![CDATA[<p>anon4354645 schrieb:</p>
<blockquote>
<p>Das Problem dabei ist halt, dass Änderungen sich nicht überall gleich auswirken. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Könnte man so etwas nicht mal in die Sprache bauen?</p>
</blockquote>
<p>Dein Problem ist nicht die Sprache, sondern deine Modellierung.</p>
<p>PS:<br />
man kann sich Code automatisch generieren lassen wenn man wirklich zu tippfaul ist. Aber im ernst: tipparbeit beim Programmieren ist vielleicht 0,00000000000001% der Zeit. Also wayne?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273226</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 21 Nov 2012 22:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 22:09:14 GMT]]></title><description><![CDATA[<p>klingt nach einem <a href="http://www.perlmonks.org/index.pl?node_id=542341" rel="nofollow">X/Y problem</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273228</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 21 Nov 2012 22:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to !(B* -&amp;gt; A*) on Wed, 21 Nov 2012 22:46:28 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Falls das Ironie sein soll: Fail? Dein B (es gibt implizite Konvertierung) ist äquivalent zu A (public Vererbung wurde genutzt).</p>
</blockquote>
<p>Nur so als Anmerkung: Er wollte doch gerade <strong>keine</strong> implizite Konvertierung?</p>
</blockquote>
<p>Es ging darum, dass er gemeint hat, dass eine implizite Konvertierungsmöglichkeit zwischen Zeigern auf nutzerdefinierte Datentypen nicht äquivalent wäre zu einer public-Vererbungsbeziehung. Aber die Diskussion ist so langsam ziemlich meta, wie man an dieser einfachen <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="😉"
    /> Zusammenfassung merkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2273236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2273236</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Nov 2012 22:46:28 GMT</pubDate></item></channel></rss>