<?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[designfrage: alternative für mehrfachvererbung]]></title><description><![CDATA[<p>Hallo</p>
<p>ich schreibe einen Wrapper für eine COM-Schnittstelle. das ergebniss soll<br />
später ebenfalls COM-kompatibel sein, damit das in bestehenden Code eingefügt<br />
werden kann.</p>
<p>Dabei gibt es ein Basisinterface meiner Klasse, was von IUnknown erbt.<br />
Die Implementation kümmert sich nur um die IUnknown-Funktionen sowie um einige<br />
standartfunktionen die ich nicht in jeder (bis zu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> verschiedenen unterklassen<br />
implementieren will.</p>
<p>Allerdings sind die Oberklassen alle abstrakt und werden später ausgelagert.</p>
<p>von diesen wiederrum erben dann die interfaces, die ebenfalls abstrakt sind.</p>
<p>das problem ist dann die implementation der abgeleiteten klasse. diese muss ja<br />
sowohl das spezielle interface der abgeleiteten klasse an bord haben, sowie<br />
die implementationsklasse des oberinterfaces (was für ein wort).</p>
<pre><code class="language-cpp">struct Base : public IUnknown
{
    virtual allgemeine_funktion() = 0; // für alle deriveds gleich
};
struct Derived : virtual public Base
{
    virtual spezial_funtkion() = 0;
};
// ===============================================
class Base_impl : virtual public Base
{
public:
    allgemeine_funktion(){}
protected:
    allgemeine_daten d;
};
class Derived_impl : public Derived, public Base_impl
{
public:
    spezial_funtkion(){}
};
</code></pre>
<p>sinn der ganzen aktion ist eigentlich nur zu verhindern, in jeder abgeleiteten<br />
klasse das selbe zu schreiben.</p>
<p>1. Frage: gibt es andere ansätze um das Problem zu lösen?<br />
2. Frage: (nutze MV eigentlich _nie_) kann es dabei probleme geben?<br />
ala 2 vtbls, doppelte daten, etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233455/designfrage-alternative-für-mehrfachvererbung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 22:40:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233455.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Feb 2009 20:56:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to designfrage: alternative für mehrfachvererbung on Wed, 04 Feb 2009 20:56:14 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich schreibe einen Wrapper für eine COM-Schnittstelle. das ergebniss soll<br />
später ebenfalls COM-kompatibel sein, damit das in bestehenden Code eingefügt<br />
werden kann.</p>
<p>Dabei gibt es ein Basisinterface meiner Klasse, was von IUnknown erbt.<br />
Die Implementation kümmert sich nur um die IUnknown-Funktionen sowie um einige<br />
standartfunktionen die ich nicht in jeder (bis zu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> verschiedenen unterklassen<br />
implementieren will.</p>
<p>Allerdings sind die Oberklassen alle abstrakt und werden später ausgelagert.</p>
<p>von diesen wiederrum erben dann die interfaces, die ebenfalls abstrakt sind.</p>
<p>das problem ist dann die implementation der abgeleiteten klasse. diese muss ja<br />
sowohl das spezielle interface der abgeleiteten klasse an bord haben, sowie<br />
die implementationsklasse des oberinterfaces (was für ein wort).</p>
<pre><code class="language-cpp">struct Base : public IUnknown
{
    virtual allgemeine_funktion() = 0; // für alle deriveds gleich
};
struct Derived : virtual public Base
{
    virtual spezial_funtkion() = 0;
};
// ===============================================
class Base_impl : virtual public Base
{
public:
    allgemeine_funktion(){}
protected:
    allgemeine_daten d;
};
class Derived_impl : public Derived, public Base_impl
{
public:
    spezial_funtkion(){}
};
</code></pre>
<p>sinn der ganzen aktion ist eigentlich nur zu verhindern, in jeder abgeleiteten<br />
klasse das selbe zu schreiben.</p>
<p>1. Frage: gibt es andere ansätze um das Problem zu lösen?<br />
2. Frage: (nutze MV eigentlich _nie_) kann es dabei probleme geben?<br />
ala 2 vtbls, doppelte daten, etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658155</guid><dc:creator><![CDATA[virtual_user()]]></dc:creator><pubDate>Wed, 04 Feb 2009 20:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage: alternative für mehrfachvererbung on Thu, 05 Feb 2009 09:40:27 GMT]]></title><description><![CDATA[<p>virtual_user() schrieb:</p>
<blockquote>
<p>sinn der ganzen aktion ist eigentlich nur zu verhindern, in jeder abgeleiteten<br />
klasse das selbe zu schreiben.</p>
</blockquote>
<p>public vererbung ist eine &quot;is a&quot; beziehung.<br />
deine beschreibung klingt mehr nach &quot;ist implementiert mit hilfe von&quot;. also private vererbung oder layering.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658323</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 05 Feb 2009 09:40:27 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage: alternative für mehrfachvererbung on Thu, 05 Feb 2009 14:32:44 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>[...] &quot;ist implementiert mit hilfe von&quot;. also private vererbung oder layering.</p>
</blockquote>
<p>genau sowas möchte ich machen. kann man das ohne mehrfachvererbung<br />
(aber im klassendesign) lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658527</guid><dc:creator><![CDATA[virtual_user()]]></dc:creator><pubDate>Thu, 05 Feb 2009 14:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to designfrage: alternative für mehrfachvererbung on Thu, 05 Feb 2009 18:46:16 GMT]]></title><description><![CDATA[<p>virtual_user() schrieb:</p>
<blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>[...] &quot;ist implementiert mit hilfe von&quot;. also private vererbung oder layering.</p>
</blockquote>
<p>genau sowas möchte ich machen. kann man das ohne mehrfachvererbung<br />
(aber im klassendesign) lösen?</p>
</blockquote>
<p>Shade hat ja bereits gesagt, dass eine private Vererbung das bedeutet..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658678</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 05 Feb 2009 18:46:16 GMT</pubDate></item></channel></rss>