<?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[basisklasse + subklassen: wie macht man das professionell?]]></title><description><![CDATA[<p>hallo!</p>
<p>Ich steht abundzu vor diesem Problem:</p>
<p>ich hätte gerne eine Basisklasse wie diese (sehr vereinfacht):</p>
<pre><code>class Form
{
 int a;
};
</code></pre>
<p>und folgende subklassen:</p>
<pre><code>class Kreis : public Form
{
 int b;
};

class Rechteck : public Form
{
 int c;
};
</code></pre>
<p>wenn ich jetzt einfach ausgedrückt das hier machen will:</p>
<pre><code>...
void addForm(Form *form);
...
Rechteck *re = ne Rechteck();
addForm(re);
...
</code></pre>
<p>Dann geht das zwar irgendwie, aber wie finde ich in addForm herraus was da jetzt eigentlich für eine Basisklasse reinkommt?<br />
ich hab dann ein Form und muss auf &quot;gut glück&quot; casten, was natürlich nur geht, wenn ich genau weiss was reinkommt.</p>
<p>meiner meinung ist die lösung irgendwas mit &quot;dynamischen casts&quot;, aber ich habe da noch nicht 100%ig durchgeblickt.</p>
<p>Wäre nett wenn mir jemand helfen könnte! Danke!</p>
<p>Gruß<br />
Marcel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129849/basisklasse-subklassen-wie-macht-man-das-professionell</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 09:36:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129849.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Dec 2005 10:13:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to basisklasse + subklassen: wie macht man das professionell? on Sat, 17 Dec 2005 10:13:52 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>Ich steht abundzu vor diesem Problem:</p>
<p>ich hätte gerne eine Basisklasse wie diese (sehr vereinfacht):</p>
<pre><code>class Form
{
 int a;
};
</code></pre>
<p>und folgende subklassen:</p>
<pre><code>class Kreis : public Form
{
 int b;
};

class Rechteck : public Form
{
 int c;
};
</code></pre>
<p>wenn ich jetzt einfach ausgedrückt das hier machen will:</p>
<pre><code>...
void addForm(Form *form);
...
Rechteck *re = ne Rechteck();
addForm(re);
...
</code></pre>
<p>Dann geht das zwar irgendwie, aber wie finde ich in addForm herraus was da jetzt eigentlich für eine Basisklasse reinkommt?<br />
ich hab dann ein Form und muss auf &quot;gut glück&quot; casten, was natürlich nur geht, wenn ich genau weiss was reinkommt.</p>
<p>meiner meinung ist die lösung irgendwas mit &quot;dynamischen casts&quot;, aber ich habe da noch nicht 100%ig durchgeblickt.</p>
<p>Wäre nett wenn mir jemand helfen könnte! Danke!</p>
<p>Gruß<br />
Marcel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944097</guid><dc:creator><![CDATA[adsci]]></dc:creator><pubDate>Sat, 17 Dec 2005 10:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to basisklasse + subklassen: wie macht man das professionell? on Sat, 17 Dec 2005 10:23:58 GMT]]></title><description><![CDATA[<p>Entweder virtuelle Funktionen und RTTI oder ganz Einfach in jeder Klasse etwas definieren was sagt was es ist <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="😃"
    /></p>
<p>zB</p>
<pre><code class="language-cpp">enum Formen { Kreis,Rechteck };

class Kreis {

   Formen meineForm;
 public:
   Kreis():meineForm(Kreis) {};

   Formen whoamI() { return meineForm; }

};
</code></pre>
<p>So wäre mein Lösungsansatz <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/944106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944106</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 17 Dec 2005 10:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to basisklasse + subklassen: wie macht man das professionell? on Sat, 17 Dec 2005 10:39:53 GMT]]></title><description><![CDATA[<p>professionell heißt &quot;für Geld&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944115</guid><dc:creator><![CDATA[btw:]]></dc:creator><pubDate>Sat, 17 Dec 2005 10:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to basisklasse + subklassen: wie macht man das professionell? on Sat, 17 Dec 2005 11:07:44 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>also willste lauter konkrete funktionen bauen, die einen typen speziell behandel?</p>
<pre><code class="language-cpp">void addRechteck(Rechteck* re);
void addKreis(Kreis* kr);
...
</code></pre>
<p>ok, mach das. nu bleibt noch die frage, was bei Form* passieren soll.</p>
<pre><code class="language-cpp">void addForm(Form* f){
   f-&gt;dispatchAddForm();
}

//virtual Form::dispatchAddForm()=0;

Kreis::dispatchAddForm(){
   addKreis(this);
}
Rechteck::dispatchAddForm(){
   addRechteck(this);
}
</code></pre>
<p>um dynamic-cast oder switch bei sowas zu nehmen, mußt du erst bei mar++us einen antrag stellen. weil das ist fast immer schlecht.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/944137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944137</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 17 Dec 2005 11:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to basisklasse + subklassen: wie macht man das professionell? on Sat, 17 Dec 2005 11:38:23 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Musst du deinen Beitragszähler hochbringen? <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="😃"
    /></p>
<p>adsci schrieb:</p>
<blockquote>
<p>meiner meinung ist die lösung irgendwas mit &quot;dynamischen casts&quot;, aber ich habe da noch nicht 100%ig durchgeblickt.</p>
</blockquote>
<p>So denken nicht gerade wenige Leute, idR ist das aber keine gute Idee und macht wirklich nur in wenigen Fällen Sinn. Besser ist es, du lagerst die Sachen, die du spezifisch für die abgeleiteten Klassen behandeln musst, in virtuelle Funktionen aus. Du musst dir so zwar etwas mehr Gedanken über dein Design machen, im Endeffekt lohnt sich das aber, da dir auch schneller Schwächen auffallen. Zudem ist es nicht nur strukturell sauberer, sondern bedeutet praktisch auch keinen Overhead. Den indirekten Funktionsaufruf kannst du dir schenken, im Gegensatz zu dynamic_cast und RTTI.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944177</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sat, 17 Dec 2005 11:38:23 GMT</pubDate></item></channel></rss>