<?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[Down-Cast sinnvoll?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: in einer Basisklasse B wird eine Referenz auf eine andere Basisklasse C festgelegt. Später will dann die abgeleitete Klasse von B auf eine Methode der abgeleiteten Klasse von C zugreifen, was nicht geht.</p>
<blockquote>
<p>Kompilerfehler: 'methoden_name' undeclared (first use this function)</p>
</blockquote>
<p>Hier mal der Code:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class C {...};

class C_ab : public C&lt;spezielles_template&gt; {
public:
	C_ab();
	void methoden_name();
};

template &lt;typename T&gt;
class B{
public:
	B(){p = NULL;}
protected:
	C&lt;T&gt;* p;
};

class B_ab : public B&lt;spezielles_template&gt;{
public:
	B_ab(){p = new C_ab;}
	void m(){p-&gt;methoden_name();}
};
</code></pre>
<p>Der Zeiger p muß schon in der Klasse B definiert werden, weil dort schon Funktionen auf ihn zugreifen (allerdings erst zur Laufzeit, wenn B_ab instanziert wurde). Das Programm ist so aufgebaut, dass die beide Klassen B_ab und C_ab vor dem Kompilieren durch andere ersetzt werden können.</p>
<p>Meine Frage(n):<br />
1. Ist hier ein Down-Cast Sinnvoll, oder gibt es eine elegantere Möglichkeit?<br />
2. Wie implementiere ich diesen (müßte ja in der Klassendeklarartion von B_ab stehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144673/down-cast-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 23:42:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144673.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Apr 2006 12:01:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Down-Cast sinnvoll? on Thu, 20 Apr 2006 12:01:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem: in einer Basisklasse B wird eine Referenz auf eine andere Basisklasse C festgelegt. Später will dann die abgeleitete Klasse von B auf eine Methode der abgeleiteten Klasse von C zugreifen, was nicht geht.</p>
<blockquote>
<p>Kompilerfehler: 'methoden_name' undeclared (first use this function)</p>
</blockquote>
<p>Hier mal der Code:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class C {...};

class C_ab : public C&lt;spezielles_template&gt; {
public:
	C_ab();
	void methoden_name();
};

template &lt;typename T&gt;
class B{
public:
	B(){p = NULL;}
protected:
	C&lt;T&gt;* p;
};

class B_ab : public B&lt;spezielles_template&gt;{
public:
	B_ab(){p = new C_ab;}
	void m(){p-&gt;methoden_name();}
};
</code></pre>
<p>Der Zeiger p muß schon in der Klasse B definiert werden, weil dort schon Funktionen auf ihn zugreifen (allerdings erst zur Laufzeit, wenn B_ab instanziert wurde). Das Programm ist so aufgebaut, dass die beide Klassen B_ab und C_ab vor dem Kompilieren durch andere ersetzt werden können.</p>
<p>Meine Frage(n):<br />
1. Ist hier ein Down-Cast Sinnvoll, oder gibt es eine elegantere Möglichkeit?<br />
2. Wie implementiere ich diesen (müßte ja in der Klassendeklarartion von B_ab stehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041250</guid><dc:creator><![CDATA[mensch0815]]></dc:creator><pubDate>Thu, 20 Apr 2006 12:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to Down-Cast sinnvoll? on Thu, 20 Apr 2006 12:11:25 GMT]]></title><description><![CDATA[<p>@1: Da bin ich momentan überfragt. Aber wenn du dir GANZ sicher bist, daß dort ein C_ab* dahintersteht, fällt mir nichts besseres ein.</p>
<p>@2: per dynamic_cast kannst du deinen Pointer passend umwandeln (das liefert NULL zurück, wenn du doch keinen C_ab dort stehen hast).<br />
(wenn du sicher bist, ohne Fehlerbehandlung auszukommen, kannst du auch static_cast verwenden - aber damit erhältst du womöglich undefiniertes Verhalten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041260</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 12:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Down-Cast sinnvoll? on Wed, 26 Apr 2006 07:49:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">static_cast&lt;C_ab*&gt;(p)-&gt;methoden_name();
</code></pre>
<p>Funktioniert.<br />
Bei</p>
<pre><code class="language-cpp">dynamic_cast&lt;C_ab*&gt;(p)-&gt;methoden_name();
</code></pre>
<p>bekomme ich folgende Fehlermeldung:</p>
<blockquote>
<p>cannot dynamic_cast <code>this-&gt;B::p' (of type \</code>class C*') to type `class C_ab*' (source type is not polymorphic)</p>
</blockquote>
<p>das verstehe ich nicht, uch führe doch den selben cast durch.<br />
Ist nicht eigentlich die Zuweisung</p>
<pre><code class="language-cpp">p = new C_ab;
</code></pre>
<p>schon kritisch, weil einem Zeiger auf C eine Instanz von C_ab zugewiesen wird?</p>
<p>Wäre es unter Umständen nicht sinnvoller eine Factory zu bauen, die einen Zeiger der richtigen Ausprägung liefert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1045429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1045429</guid><dc:creator><![CDATA[mensch0815]]></dc:creator><pubDate>Wed, 26 Apr 2006 07:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Down-Cast sinnvoll? on Wed, 26 Apr 2006 08:09:08 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung sagt doch alles. Deine Basisklasse ist nicht polymorph, d.h. sie enthält keine virtuellen Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1045435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1045435</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 26 Apr 2006 08:09:08 GMT</pubDate></item></channel></rss>