<?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[Datentyp -&amp;gt; virtual?]]></title><description><![CDATA[<p>Hallo,</p>
<p>klar, ein Datentyp kann in C++ nicht virtual sein!<br />
Ich habe folgendes Problem (vereinfacht, es gibt mehrere abgeleitete Klassen von A als auch von Basis):</p>
<pre><code class="language-cpp">class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	void Func();
};

//-------------------------
class Basis
{
protected:
	A m_A;  // &lt;-- Problem
};

class Abgeleitet : public Basis
{
private:
	B m_A;
};
</code></pre>
<p>Kann ich in die Klasse Basis eine Instanz von A einbinden? So wie in meinem Code geht das ja nicht, weil A eine virtuelle Funktion hat?!</p>
<p>Ich muss aber voraussetzen, das alle von Basis abgeleiteten Klassen ein von A abgeleitetes Element besitzen. Wie kann ich das machen?</p>
<p>Oder eine andere Methode, es muss doch eine (nicht zu komplizierte) Möglichkeit geben?!</p>
<p>Vllt denke ich auch einfach verkehrt, wer kann mir helfen?</p>
<p>MfG,<br />
XCoder</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241024/datentyp-gt-virtual</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 18:38:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241024.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 May 2009 18:28:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 18:29:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>klar, ein Datentyp kann in C++ nicht virtual sein!<br />
Ich habe folgendes Problem (vereinfacht, es gibt mehrere abgeleitete Klassen von A als auch von Basis):</p>
<pre><code class="language-cpp">class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	void Func();
};

//-------------------------
class Basis
{
protected:
	A m_A;  // &lt;-- Problem
};

class Abgeleitet : public Basis
{
private:
	B m_A;
};
</code></pre>
<p>Kann ich in die Klasse Basis eine Instanz von A einbinden? So wie in meinem Code geht das ja nicht, weil A eine virtuelle Funktion hat?!</p>
<p>Ich muss aber voraussetzen, das alle von Basis abgeleiteten Klassen ein von A abgeleitetes Element besitzen. Wie kann ich das machen?</p>
<p>Oder eine andere Methode, es muss doch eine (nicht zu komplizierte) Möglichkeit geben?!</p>
<p>Vllt denke ich auch einfach verkehrt, wer kann mir helfen?</p>
<p>MfG,<br />
XCoder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710632</guid><dc:creator><![CDATA[XCoder++]]></dc:creator><pubDate>Thu, 14 May 2009 18:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 18:32:38 GMT]]></title><description><![CDATA[<p>Falsch A hat eine Abstrakte Funktion mach das &quot;= 0&quot; weg und defeniere die, dann müsste sie auch als virtuelle gehen...</p>
<p>Dann müsstest du davon auch wieder Objekte erzeugen können.<br />
Von Abstrakten Klassen geht dieses nicht das sie Abstrakt sind sprich man kann dan nur von ihnen erben lassen diese Abstrakte Klassen dienen auch als Schablonen für andere Klassen.</p>
<p>Mfg WIkinger75</p>
<p>Edit: Also eine Instanz von A bekommst du in B nur ein wen A nicht abstrakt ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710634</guid><dc:creator><![CDATA[Wikinger75]]></dc:creator><pubDate>Thu, 14 May 2009 18:32:38 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 18:55:52 GMT]]></title><description><![CDATA[<p>Danke, ich hab so was in der Richtung schon geahnt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710654</guid><dc:creator><![CDATA[XCoder++]]></dc:creator><pubDate>Thu, 14 May 2009 18:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 19:03:22 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20029">@Wikinger75</a>:<br />
Ach Mann laber nicht. Du hast die Frage nicht verstanden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16412">@XCoder</a>++:<br />
Wenn dich nicht stört dass es ein Hack ist, der zwar IMO nicht 100% Standardkonform ist, aber trotzdem auf jedem mir bekannten Compiler funktioniert, könntest du es so machen:</p>
<pre><code class="language-cpp">class A
{
public:
    virtual void Func() = 0;
};

class B : public A
{
public:
    void Func();
};

//-------------------------
class Basis
{
protected:
    explicit Basis(A* a) : m_a(a) {}
private:
    A* m_a;
};

class Abgeleitet : public Basis
{
public:
    Abgeleitet() : Basis(&amp;m_b) {}
private:
    B m_b;
};
</code></pre>
<p>Das einzig &quot;böse&quot; was hier passiert, ist, dass man einen &quot;Zeiger auf ein noch nicht konstruiertes Objekt&quot; übergibt. Solange der Konstruktor von &quot;Basis&quot; sich diesen Zeiger aber nur merkt, und nicht verwendet, sollte es funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710658</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 May 2009 19:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 19:12:56 GMT]]></title><description><![CDATA[<p>p.S.: du kannst das von A abgeleitete Objekt natürlich auch dynamisch anlegen, also so:</p>
<pre><code class="language-cpp">class Basis
{
protected:
    explicit Basis(A* a) : m_a(a) {}

    std::auto_ptr&lt;A&gt; m_a;
};

class Abgeleitet : public Basis
{
public:
    Abgeleitet() : Basis(new B) {}
};
</code></pre>
<p>Das wäre dann hübsch Standard-Konform.</p>
<p>Und natürlich musst du bei beiden Varianten den Copy-Ctor und Assignment-Operator selbst implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710669</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 May 2009 19:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 20:23:42 GMT]]></title><description><![CDATA[<p>Und hustbaer's Aspekt zeigt gleichzeitig erst den Sinn der Polymorphie und virtual. Und NULL-Pointer sind eingentlich immer in Verwendung, nicht ganz konform, aber prinzipiell standart.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710726</guid><dc:creator><![CDATA[fsdfsdf]]></dc:creator><pubDate>Thu, 14 May 2009 20:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 20:40:07 GMT]]></title><description><![CDATA[<p>Ok, thx! Das sagt mir dann doch mehr zu. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710736</guid><dc:creator><![CDATA[XCoder++]]></dc:creator><pubDate>Thu, 14 May 2009 20:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp -&amp;gt; virtual? on Thu, 14 May 2009 21:29:05 GMT]]></title><description><![CDATA[<p>Nochwas: wenn mit new angelegt, dann bitte den Destruktor in A virtual machen.<br />
Sonst würde z.B. auto_ptr nicht den korrekten Destruktor aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710749</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 May 2009 21:29:05 GMT</pubDate></item></channel></rss>