<?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 zu parallelen Klassenhierarchien]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein kleines Designproblem, vielleicht kann mir jemand ein Stichwort nennen,<br />
unter dem ich ein Pattern finden kann oder mir Hinweise geben, wie man so etwas lösen kann.</p>
<p>Im Prinzip habe ich zwei parallele Klassenhierarchien, wobei ich versuche das<br />
auf ein Minimalbeispiel zu reduzieren (die jeweilige Hierarchie besteht aus deutlich mehr als 2 Klassen):</p>
<pre><code class="language-cpp">class A
{
  public:
  void A1();
  A_data data;
};

class B: public A
{
  public:
  B_data data;
};

class A_data
{
};

class B_data : public A_data
{
};
</code></pre>
<p>Das Problem ist nun, dass die Klasse A beispielsweise einen Algorithmus A1 bereitstellt, die das Objekt data<br />
manipuliert. Nun möchte ich in etwa soetwas machen:</p>
<pre><code class="language-cpp">B objekt;
B.A1();
</code></pre>
<p>Nur das Problem ist natürlich, dass A1() data vom Typ A_data manipulieren möchte, nicht<br />
jedoch das &quot;überschriebene&quot; data vom Typ B_data, welches durch Vererbung dennoch alle<br />
Eigenschaften bereithält, um von Algorithmus A1 bearbeitet zu werden.</p>
<p>Ich hatte zuerst an eine Version mit templates gedacht, soetwas wie</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A
{
  public:
  void A1();
  T data;
};

template &lt;class T&gt;
class B: public A&lt;T&gt;
{
  public:
};
</code></pre>
<p>Aber bevor ich den kompletten Code umwälze, wollte ich mich bei euch noch einmal vergewissern.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262399/designfrage-zu-parallelen-klassenhierarchien</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 13:02:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262399.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Mar 2010 13:09:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designfrage zu parallelen Klassenhierarchien on Fri, 05 Mar 2010 13:09:41 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein kleines Designproblem, vielleicht kann mir jemand ein Stichwort nennen,<br />
unter dem ich ein Pattern finden kann oder mir Hinweise geben, wie man so etwas lösen kann.</p>
<p>Im Prinzip habe ich zwei parallele Klassenhierarchien, wobei ich versuche das<br />
auf ein Minimalbeispiel zu reduzieren (die jeweilige Hierarchie besteht aus deutlich mehr als 2 Klassen):</p>
<pre><code class="language-cpp">class A
{
  public:
  void A1();
  A_data data;
};

class B: public A
{
  public:
  B_data data;
};

class A_data
{
};

class B_data : public A_data
{
};
</code></pre>
<p>Das Problem ist nun, dass die Klasse A beispielsweise einen Algorithmus A1 bereitstellt, die das Objekt data<br />
manipuliert. Nun möchte ich in etwa soetwas machen:</p>
<pre><code class="language-cpp">B objekt;
B.A1();
</code></pre>
<p>Nur das Problem ist natürlich, dass A1() data vom Typ A_data manipulieren möchte, nicht<br />
jedoch das &quot;überschriebene&quot; data vom Typ B_data, welches durch Vererbung dennoch alle<br />
Eigenschaften bereithält, um von Algorithmus A1 bearbeitet zu werden.</p>
<p>Ich hatte zuerst an eine Version mit templates gedacht, soetwas wie</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A
{
  public:
  void A1();
  T data;
};

template &lt;class T&gt;
class B: public A&lt;T&gt;
{
  public:
};
</code></pre>
<p>Aber bevor ich den kompletten Code umwälze, wollte ich mich bei euch noch einmal vergewissern.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864735</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Fri, 05 Mar 2010 13:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage zu parallelen Klassenhierarchien on Fri, 05 Mar 2010 13:43:50 GMT]]></title><description><![CDATA[<p>So wie dus bisher gemacht hast ist das schlechtes Design, denn du behälst das Member vom typ A_data ja noch als Ballast den du garnicht brauchst. denke immer daran, dass Vererbung eine &quot;Ist-ein&quot;-Beziehung ist. Das scheint mir nach deiner Beschreibung aber nicht der Fall zu sein.<br />
Du brauchst mit dem was du beschrieben hast nichmal ein Template:</p>
<p>[cpp]class A<br />
{<br />
public:<br />
void A1();<br />
A_data* data;</p>
<p>void setData(A_data&amp; rdata) {data = &amp;rdata;}<br />
};</p>
<p>class A_data<br />
{<br />
};</p>
<p>class B_data : public A_data<br />
{<br />
};</p>
<p>int main()<br />
{<br />
A_data adata;<br />
B_data bdata;</p>
<p>A a;<br />
a.setData(adata);<br />
a.A1 //operiert auf adata<br />
a.setData(bdata);<br />
a.A1; //operiert auf bdata<br />
} [cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864741</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 05 Mar 2010 13:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage zu parallelen Klassenhierarchien on Fri, 05 Mar 2010 15:10:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke erstmal für deine Hinweise, aber ich glaube ich hab die Frage ein wenig falsch gestellt.</p>
<pre><code class="language-cpp">class TypA
{
};

class TypB : public TypA // Erweiterung des Typs A
{

}

class A
{
public:
void doA(); // do sth with data
private:
std::vector&lt;TypB&gt; data;
}

class B: public A
{
public:
void doB(); // do sth with data

}
</code></pre>
<p>So in etwa ist es im Moment im Code gelöst. Eigentlich würde der Klasse A aber auch</p>
<pre><code class="language-cpp">std::vector&lt;TypA&gt; data;
</code></pre>
<p>als datenmember &quot;reichen&quot;.</p>
<p>Wenn ich nun die ein Objekt der Klasse A instanziiere, habe ich alle für A &quot;überflüssigen&quot; Erweiterungen in TypB mit dabei, obwohl diese nicht benötigt werden. (Die Klasse A benötigt TypA, die Klasse B TypB)</p>
<p>... ganz schön schwierig so ein Problem zu beschreiben :p Ich hoffe der Kern des Problems ist dieses mal besser beschrieben.</p>
<p>Danke für eure Zeit!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864773</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Fri, 05 Mar 2010 15:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to Designfrage zu parallelen Klassenhierarchien on Mon, 08 Mar 2010 20:45:25 GMT]]></title><description><![CDATA[<p>Hat noch jemand einen Tipp / Kommentar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1866218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1866218</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Mon, 08 Mar 2010 20:45:25 GMT</pubDate></item></channel></rss>