<?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[Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich?]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es irgend eine Möglichkeit über einen Basisklassenzeiger auf Member einer abgeleiteten Klasse zuzugreifen? Beispiel:</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
using namespace std;

class Tier
{
public:
	void Bewegen() {};
};

class Vogel : public Tier
{
public:
	void Fliegen()
	{
		cout &lt;&lt; &quot;Vogel fliegt\n&quot;;
	}
};

void main()
{
	Tier* t = new Vogel();

	t-&gt;Fliegen(); // error C2039: &quot;Fliegen&quot;: Ist kein Element von &quot;Tier&quot;

	cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/335446/über-basisklassenzeiger-zugriff-auf-abgeleitete-klasse-möglich</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 19:36:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335446.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Nov 2015 15:47:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 15:48:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es irgend eine Möglichkeit über einen Basisklassenzeiger auf Member einer abgeleiteten Klasse zuzugreifen? Beispiel:</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
using namespace std;

class Tier
{
public:
	void Bewegen() {};
};

class Vogel : public Tier
{
public:
	void Fliegen()
	{
		cout &lt;&lt; &quot;Vogel fliegt\n&quot;;
	}
};

void main()
{
	Tier* t = new Vogel();

	t-&gt;Fliegen(); // error C2039: &quot;Fliegen&quot;: Ist kein Element von &quot;Tier&quot;

	cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2476404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476404</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sat, 21 Nov 2015 15:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 15:52:37 GMT]]></title><description><![CDATA[<pre><code>void main()
{
	Tier* t = new Vogel();

	t-&gt;Fliegen(); // error C2039: &quot;Fliegen&quot;: Ist kein Element von &quot;Tier&quot;

        Vogel* v=static_cast&lt;Vogel*&gt;(t);//dafür kommst du aber in die Hölle
        v-&gt;Fliegen();

	cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2476408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476408</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2015 15:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 16:01:53 GMT]]></title><description><![CDATA[<p>Habe es jetzt doch selbst hinbekommen:</p>
<pre><code>static_cast&lt;Vogel*&gt;(t)-&gt;Fliegen();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2476411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476411</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sat, 21 Nov 2015 16:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 16:11:18 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code>void main()
{
	Tier* t = new Vogel();

	t-&gt;Fliegen(); // error C2039: &quot;Fliegen&quot;: Ist kein Element von &quot;Tier&quot;

        Vogel* v=static_cast&lt;Vogel*&gt;(t);//dafür kommst du aber in die Hölle
        v-&gt;Fliegen();

	cin.get();
}
</code></pre>
</blockquote>
<p>Hallo Volkard,</p>
<p>danke für die Antwort.</p>
<p>&quot;Dafür kommst du aber in die Hölle&quot;.</p>
<p>Sollte &quot;Casting&quot; denn möglichst immer vermieden werden? Das besagte Programmteil ist nicht Laufzeit kritisch. Es handelt sich um einen Menübefehl, der via &quot;Cast&quot; einem Setter() zugewiesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476415</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sat, 21 Nov 2015 16:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 16:15:06 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Sollte &quot;Casting&quot; denn, falls irgend möglich, immer vermieden werden?</p>
</blockquote>
<p>Ja. Ist ein wenig wie goto.</p>
<p>Aber dazu brauchste virtuelle Methoden und dynamic_cast und sowas ähnliches wie <a href="https://duckduckgo.com/?q=isbn+3826629841&amp;cppnetbooks" rel="nofollow">Objektorientierte Programmierung für Dummies | ISBN: 3826629841</a>.</p>
<p>mireiner schrieb:</p>
<blockquote>
<p>Das besagte Programmteil ist nicht Laufzeitkritisch. Es handelt sich um einen Menünefehl, der einem Setter() zugewiesen wird.</p>
</blockquote>
<p>Das besagte Programmteil ist nicht kritisch, weil das Programm nicht ein großes Programm mit 100 Klassen werden wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476418</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2015 16:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:29:23 GMT]]></title><description><![CDATA[<p>Ohne virtuelle Funktionen macht die Ableitung hier denke ich so oder so wenig Sinn. Für dynamic_cast kommst du aber auch in die Hölle, da führt wohl kein Weg dran vorbei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476432</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:29:23 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:38:14 GMT]]></title><description><![CDATA[<p>Ich habe mich für Objekte, die über einen Basisklassenzeiger erzeugt werden entschieden, weil die später mit virtuellen Funktionen sehr einfach einheitlich aufgerufen werden können:</p>
<pre><code>t-&gt;Berechnen();
t-&gt;Bewegen();
t-&gt;Zeichnen();
usw..
</code></pre>
<p>Nur wird es dann schwierig, wenn Objekt Eigenschaften und Funktionen aufgerufen werden sollen, die nur einem einzigen Objekt gehören. Dafür virtuelle Funktionen auch bei allen anderen Objekten einzurichten, die diese Eigenschaften nicht haben, macht ja keinen Sinn. Für diesen Fall ist dann das &quot;Casting&quot; gedacht, um über den Basisklassenzeiger an die &quot;speziellen&quot; Funktionen zu gelangen.</p>
<p>Im Grunde ist doch der Aufruf von abgeleiteten Klassen mit virtuellen Funktionen über einen Basiklassenzeiger ein nicht seltenes Design. Da muss es doch auch eine Lösung ohne &quot;Casting&quot; geben, um an Sonderfunktionen einzelner Objekte zu kommen. An dem Punkt habe ich ein Brett vorm Kopf. Weiß jemand vielleicht, wie das gehen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476433</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:39:35 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Im Grunde ist doch der Aufruf von abgeleiteten Klassen mit virtuellen Funktionen über einen Basiklassenzeiger ein nicht seltenes Design. Da muss es doch auch eine Lösung ohne &quot;Casting&quot; geben, um an Sonderfunktionen einzelner Objekte zu kommen. Weiß jemand vielleicht, wie das gehen könnte?</p>
</blockquote>
<p>Ich denke, dafür ist dein gesamtes Design noch nicht ausgereift genug. Meist braucht man das nicht. Wenn du an einer Stelle, an der du nur über Basisklassenzeiger verfügst weißt, dass es bestimmte Ableitungen gibt, ist das Design schon irgendwie falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476437</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:44:54 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Im Grunde ist doch der Aufruf von abgeleiteten Klassen mit virtuellen Funktionen über einen Basiklassenzeiger ein nicht seltenes Design. Da muss es doch auch eine Lösung ohne &quot;Casting&quot; geben, um an Sonderfunktionen einzelner Objekte zu kommen. An dem Punkt habe ich ein Brett vorm Kopf. Weiß jemand vielleicht, wie das gehen könnte?</p>
</blockquote>
<p>Bei Dir fehlt doch aber eine überschriebene virtuelle Funktion?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class Tier
{
public:
  virtual void Bewegen() = 0;  // Tier ist abstrakt
  virtual ~Tier() = default;   // Tier ist Basisklasse
};

class Vogel : public Tier
{
public:
    void Bewegen() override
    {
        cout &lt;&lt; &quot;Vogel fliegt\n&quot;;
    }
};

int main()  // Rueckgabetyp von main() ist int
{
    Tier* t = new Vogel();
    t-&gt;Bewegen();
    delete t;
    cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2476439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476439</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:47:16 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Ich denke, dafür ist dein gesamtes Design noch nicht ausgereift genug. Meist braucht man das nicht. Wenn du an einer Stelle, an der du nur über Basisklassenzeiger verfügst weißt, dass es bestimmte Ableitungen gibt, ist das Design schon irgendwie falsch.</p>
</blockquote>
<p>So etwas hatte ich schon geahnt. Da bleibt mir wohl nur, die grundlegende Struktur noch einmal neu zu überdenken.</p>
<p>Danke fur den Rat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476442</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 17:56:46 GMT]]></title><description><![CDATA[<p>Wobei ich doch ergänzen muss, dass man ab und zu nicht sinnvoll ohne Casts auskommt. Braucht man am ehesten im GUI Code. Wenn dir das GUI Framework eine Möglichkeit bietet, an die Elemente (z.B. Menüpunkte) beliebige Daten anzuhängen, und du dann beim Ausführen ganz sicher weißt, was das ist, dann kann man schon einfach casten, da lohnen sich irgendwelche anderen Lösungen auch nicht. Das ist jetzt aber auch nicht unbedingt ein Fall, wo du etwas über Basisklassenzeiger verwaltest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476447</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 21 Nov 2015 17:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 18:05:36 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Wobei ich doch ergänzen muss, dass man ab und zu nicht sinnvoll ohne Casts auskommt. Braucht man am ehesten im GUI Code. Wenn dir das GUI Framework eine Möglichkeit bietet, an die Elemente (z.B. Menüpunkte) beliebige Daten anzuhängen, und du dann beim Ausführen ganz sicher weißt, was das ist, dann kann man schon einfach casten, da lohnen sich irgendwelche anderen Lösungen auch nicht. Das ist jetzt aber auch nicht unbedingt ein Fall, wo du etwas über Basisklassenzeiger verwaltest.</p>
</blockquote>
<p>Jo, das ist void* nach Data* casten. Oder char* nach Data*.</p>
<p>Der static downcast fällt mir jetzt nur bei doppelt verketten Listenknoten ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476453</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2015 18:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 18:16:22 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Der static downcast fällt mir jetzt nur bei doppelt verketten Listenknoten ein.</p>
</blockquote>
<p>Hmm, warum? Steh grad auf dem Schlauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476456</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 21 Nov 2015 18:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 18:36:53 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Der static downcast fällt mir jetzt nur bei doppelt verketten Listenknoten ein.</p>
</blockquote>
<p>Hmm, warum? Steh grad auf dem Schlauch.</p>
</blockquote>
<p>Weil ich die als doppelt verketteten niemals leeren Ring implementiere, dadurch gibts kein if mehr im Code.</p>
<pre><code>template&lt;typename Data&gt;
class List{
    struct NodeBase{
        NodeBase* prev;
        NodeBase* pred;
    };
    struct Node:public NodeBase{
        Data data;
    };
    NodeBase anchor;
public:
    List(){
        anchor-&gt;prev=&amp;anchor;
        anchor-&gt;pred=anchor;
    }
    bool isEmpty(){
        return anchor-&gt;prev==anchor;
    }
    Data&amp; peekFront(){
        return static_downcast&lt;Node*&gt;(anchor.pred)-&gt;data;
    }
    Data&amp; peekBack(){
        return static_downcast&lt;Node*&gt;(anchor.prev)-&gt;data;
    }
    void pushFront(Data const&amp; data){
        Node* n=new Node(data);
        n-&gt;prev=anchor;
        n-&gt;pred=anchor-&gt;pred;
        n-&gt;prev-&gt;pred=n;
        n-&gt;pred-&gt;prev=n;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2476461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476461</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 21 Nov 2015 18:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sat, 21 Nov 2015 22:18:26 GMT]]></title><description><![CDATA[<p>In CRTP sind sie auch nicht toxisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476484</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sat, 21 Nov 2015 22:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sun, 22 Nov 2015 01:56:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code>...
</code></pre>
</blockquote>
<p>prev und pred ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476493</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 22 Nov 2015 01:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sun, 22 Nov 2015 02:39:57 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<pre><code>...
</code></pre>
</blockquote>
<p>prev und pred ?</p>
</blockquote>
<p>Ähm, einer der beiden Bezeichner lügt aber gewaltig.<br />
prev/next oder pred/succ, aber prev/pred ist Vollquatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476495</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 22 Nov 2015 02:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Über Basisklassenzeiger Zugriff auf abgeleitete Klasse möglich? on Sun, 22 Nov 2015 08:42:20 GMT]]></title><description><![CDATA[<p>Grad auf nem Trip oder wie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2476507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2476507</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Sun, 22 Nov 2015 08:42:20 GMT</pubDate></item></channel></rss>