<?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[Alternative zur downcasting methode in diesem Beispiel?]]></title><description><![CDATA[<p>Folgene Klassenhierache:</p>
<pre><code class="language-cpp">class Basis{

  int iBasis;

};

class A : public Basis{

 int iA;

};

class B: public Basis{

 int iB;

};

class Block{

 std::list&lt;*Basis&gt; LIST;
.
.
.

};
</code></pre>
<p>Die Klasse Block beinhaltet eine Menge von Objekte A oder B! Die Hierachie soll nun nachträglich erweiterbar sein dur bspw. Klasse C etc.</p>
<p>nun gibt es zwei Klasse welche abhänigig bvom Typ ein Block konfiguriert/ erzeugt:</p>
<pre><code class="language-cpp">class ManagmentA{

  Block&amp; Add();
  Config(Block *p){..};
};

class ManagmentB{

  Block&amp; Add();
  Config(Block *p){..};
};
</code></pre>
<p>ManagmentA erzeugt ein Block mit A objekten und ManagmentB mit B objekten..</p>
<p>nun kommt man unweigerlich nicht dran vorbei in disen Klasen auf A und B downzucaten um auf desen Eigenschaften zuzugreifen ..</p>
<p>gibts es ne andere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188393/alternative-zur-downcasting-methode-in-diesem-beispiel</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:17:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188393.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Jul 2007 05:46:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Alternative zur downcasting methode in diesem Beispiel? on Tue, 31 Jul 2007 05:46:03 GMT]]></title><description><![CDATA[<p>Folgene Klassenhierache:</p>
<pre><code class="language-cpp">class Basis{

  int iBasis;

};

class A : public Basis{

 int iA;

};

class B: public Basis{

 int iB;

};

class Block{

 std::list&lt;*Basis&gt; LIST;
.
.
.

};
</code></pre>
<p>Die Klasse Block beinhaltet eine Menge von Objekte A oder B! Die Hierachie soll nun nachträglich erweiterbar sein dur bspw. Klasse C etc.</p>
<p>nun gibt es zwei Klasse welche abhänigig bvom Typ ein Block konfiguriert/ erzeugt:</p>
<pre><code class="language-cpp">class ManagmentA{

  Block&amp; Add();
  Config(Block *p){..};
};

class ManagmentB{

  Block&amp; Add();
  Config(Block *p){..};
};
</code></pre>
<p>ManagmentA erzeugt ein Block mit A objekten und ManagmentB mit B objekten..</p>
<p>nun kommt man unweigerlich nicht dran vorbei in disen Klasen auf A und B downzucaten um auf desen Eigenschaften zuzugreifen ..</p>
<p>gibts es ne andere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335378</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 31 Jul 2007 05:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Alternative zur downcasting methode in diesem Beispiel? on Tue, 31 Jul 2007 08:04:19 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Folgene Klassenhierache:</p>
<pre><code class="language-cpp">class Basis{

  int iBasis;
};

class A : public Basis{

 int iA;
};

class B: public Basis{

 int iB;

};

class Block{

 std::list&lt;*Basis&gt; LIST;
.
.
.

};
</code></pre>
<p>Die Klasse Block beinhaltet eine Menge von Objekte A oder B! Die Hierachie soll nun nachträglich erweiterbar sein dur bspw. Klasse C etc.</p>
<p>nun gibt es zwei Klasse welche abhänigig bvom Typ ein Block konfiguriert/ erzeugt:</p>
<pre><code class="language-cpp">class ManagmentA{

  Block&amp; Add();
  Config(Block *p){..};
};

class ManagmentB{

  Block&amp; Add();
  Config(Block *p){..};
};
</code></pre>
<p>ManagmentA erzeugt ein Block mit A objekten und ManagmentB mit B objekten..</p>
<p>nun kommt man unweigerlich nicht dran vorbei in disen Klasen auf A und B downzucaten um auf desen Eigenschaften zuzugreifen ..</p>
<p>gibts es ne andere Möglichkeit?</p>
</blockquote>
<p>Ähhh warte mal: Die Management-Klassen erzeugen die Block-Objekte (und damit auch die Listen) ?</p>
<p>Wo liegt dann da das Problem ?</p>
<pre><code class="language-cpp">class Management {
   vector&lt;Block*&gt; Blocks;

   template &lt;typename T&gt; // kann man auch als template schreiben
   Block* erzeugeBlock() {
      Block* b = new Block;
      b-&gt;LIST.insert(new T(1));
      b-&gt;LIST.insert(new T(2));
      Blocks.push_back(b);
      return b;
   }
...

int main() {
   Management m;
   m.erzeugeBlock&lt;A&gt;();
   m.erzeugeBlock&lt;B&gt;();
...
</code></pre>
<p>Kannst natürlich auch zwei getrennte ManagementKlassen schreiben, wenn sie zu unterschiedlich sind, aber da ginge das dann genauso. Wenn dann die Config()'s unterschiedlich arbeiten sollen, würde ich das (per klassischer Polymorphie) an A und B delegieren (entsprechende virtual Interface in der Basis).</p>
<p>Allerdings weiß ich nicht, wie Dein &quot;getter&quot; Add(); und Dein Config() dazu passen....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335446</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 31 Jul 2007 08:04:19 GMT</pubDate></item></channel></rss>