<?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[Problem beim ableiten]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne folgendes machen: Sei A eine Klasse und B eine aus A abgeleitete Klasse. Des Weiteren sei</p>
<pre><code class="language-cpp">class C
{
public:
    A n;
    // ...
}
</code></pre>
<p>Nun möchte ich eine Klasse D aus C ableiten, in der n nicht vom Typ A, sondern vom Typ B ist. Also ungefähr</p>
<pre><code class="language-cpp">class D : public C
{
public:
    B n;
    // ...
}
</code></pre>
<p>Wenn ich das allerdings so mache, verfügt D dann sowohl über ein n vom Typ B als auch ein n vom Typ A. Ich möchte aber, dass das n vom Typ A durch das n vom Typ B ersetzt wird und nicht beide nebeneinander existieren. Kann irgendwer was dazu sagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202933/problem-beim-ableiten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 04:17:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202933.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Jan 2008 21:20:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim ableiten on Wed, 16 Jan 2008 21:20:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne folgendes machen: Sei A eine Klasse und B eine aus A abgeleitete Klasse. Des Weiteren sei</p>
<pre><code class="language-cpp">class C
{
public:
    A n;
    // ...
}
</code></pre>
<p>Nun möchte ich eine Klasse D aus C ableiten, in der n nicht vom Typ A, sondern vom Typ B ist. Also ungefähr</p>
<pre><code class="language-cpp">class D : public C
{
public:
    B n;
    // ...
}
</code></pre>
<p>Wenn ich das allerdings so mache, verfügt D dann sowohl über ein n vom Typ B als auch ein n vom Typ A. Ich möchte aber, dass das n vom Typ A durch das n vom Typ B ersetzt wird und nicht beide nebeneinander existieren. Kann irgendwer was dazu sagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438024</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 16 Jan 2008 21:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ableiten on Wed, 16 Jan 2008 21:40:55 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Kann irgendwer was dazu sagen?</p>
</blockquote>
<p>Ich kann dir sagen, dass das so nicht geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Vererbung ist da, um bestehende Sachen zu <em>erweitern</em> und nicht, um sie zu <em>ersetzen</em> oder zu verändern.</p>
<p>PS: Klassenvariablen sind oft Privatsache <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438031</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 16 Jan 2008 21:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ableiten on Wed, 16 Jan 2008 22:11:45 GMT]]></title><description><![CDATA[<p>Wie schon angegeben kannst du nicht in die Verbungsstruktur eingreifen und Membervariablen sollten niemals public sein.</p>
<blockquote>
<p>...<br />
Wenn ich das allerdings so mache, verfügt D dann sowohl über ein n vom Typ B als auch ein n vom Typ A. Ich möchte aber, dass das n vom Typ A durch das n vom Typ B ersetzt wird und nicht beide nebeneinander existieren. Kann irgendwer was dazu sagen?</p>
</blockquote>
<p>Was du machen kannst ist mit einem Zeiger auf A zu arbeiten, da diesem Zeiger dank Polymorphie auch ein Objekt vom Typ B zugewiesen werden kann. Sofern die Klassen A und B in den Bereichen die du brauchst identliche (virtuelle) Methoden besitzt, musst du auch keinen (langsamen) dynamic_cast einsetzen.</p>
<p>Ungetestet und ohne Fehlerhandling aus dem Kopf geschrieben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class GraphicObject
{
    public:
        virtual GraphicObject();
        virtual Draw() = 0;
};

class Circle : public GraphicObject
{
    public:
        virtual Draw()
        {
            std::cout &lt;&lt; &quot;Ein Kreis\n&quot;;
        }
};

class Rectangle : public GraphicObject
{
    public:
        virtual Draw()
        {
            std::cout &lt;&lt; &quot;Ein Rechteck\n&quot;;
        }
        void RectangleSpezific()
        {
            std::cout &lt;&lt; &quot;Rechteck spezifische Methode&quot;;
        }
};

class C
{
    protected:
        GraphicObject* graphic;

        C(GraphicObject* graphic)
        :  graphic(graphic)
        {}

    public:
        C()
        :  graphic(new Circle())
        {}
        virtual ~C()
        {
            delete graphic;
        }

        virtual void DoSomething1()
        {
            std::cout &lt;&lt; &quot;void DoSomething1()\n&quot;;
            // ...
            graphic-&gt;Draw();
            // ...
        }
};

class D : public C
{
    public:
        D()
        :  C(new Rectangle())
        {}

        void DoSomething2()
        {
            std::cout &lt;&lt; &quot;void DoSomething2()\n&quot;;
            // ...
            graphic-&gt;Draw();
            Rectangle* rectangle = dynamic_cast&lt;Rectangle*&gt;(graphic);
            if(rectangle)
                rectangle-&gt;RectangleSpezific();
            // ...
        }
};

int main()
{
    C object1;
    D object2;

    object1.DoSomething1();
    object2.DoSomething1();
    object2.DoSomething2();
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438051</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 16 Jan 2008 22:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim ableiten on Thu, 17 Jan 2008 00:13:52 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich würde gerne folgendes machen: Sei A eine Klasse und B eine aus A abgeleitete Klasse. Des Weiteren sei</p>
<pre><code class="language-cpp">class C
{
public:
    A n;
    // ...
}
</code></pre>
<p>Nun möchte ich eine Klasse D aus C ableiten, in der n nicht vom Typ A, sondern vom Typ B ist. Also ungefähr</p>
<pre><code class="language-cpp">class D : public C
{
public:
    B n;
    // ...
}
</code></pre>
<p>Wenn ich das allerdings so mache, verfügt D dann sowohl über ein n vom Typ B als auch ein n vom Typ A. Ich möchte aber, dass das n vom Typ A durch das n vom Typ B ersetzt wird und nicht beide nebeneinander existieren. Kann irgendwer was dazu sagen?</p>
</blockquote>
<p>höre auf die leute, die vor mir gepostet haben.<br />
wenn du das verhalten trotzdem so haben willst, dann:</p>
<pre><code class="language-cpp">class C_Interface //Fals du Polymorphie brauchst
{
public:
   virtual void fun () = 0;
   virtual ~C_Interface () {}
};

template &lt;class T&gt;
class C_T : public C_Interface
{
public:
   T n;
};

typedef C_T&lt;A&gt; C;

class Derived : public C_T&lt;B&gt;
{
};
</code></pre>
<p>für den fall, dass das objekt in Derived tatsächlich niemals ein A sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438075</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 17 Jan 2008 00:13:52 GMT</pubDate></item></channel></rss>