<?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[Polymorphie und *_cast]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab ein kleines Problem/logischen Fehler mit Polymorphie:</p>
<p>Ich habe eine Basis-Klasse mit, wer denkt es sich schon?, Basis-Eigenschaften (class Object). Von dieser Klasse entsprechend abgeleitet Klassen mit Zusatz-Eigenschaften (class ObjectName oder weitere).</p>
<pre><code class="language-cpp">#ifndef _OBJECT_H
#define _OBJECT_H
class Object
{
public:
	Object ();
	virtual ~Object ();
	void setPos ( const float a_pos );
	float getPos ( ) const;
private:
	float m_f_pos;
};
#endif // #ifndef _OBJECT_H

#ifndef _OBJECT_STATION_H
#define _OBJECT_STATION_H
#include &quot;Object.h&quot;
class ObjectName : public Object
{
public:
	ObjectStation ();
	~ObjectStation ();
	void setName ( const string&amp; a_name );
	string getName ( ) const;
private:
	string m_str_name;
};
#endif // #ifndef _OBJECT_STATION_H
</code></pre>
<p>Zur Organisation der Objekte benutze ich einen vector mit Elementen der Basis-Klasse.</p>
<pre><code class="language-cpp">#ifndef _FINDER_H
#define _FINDER_H
class Finder
{
public:
	Finder ();
	~Finder ();
	Object* doFind ( const string&amp; a_name );
private:
	vector &lt; Object &gt; m_vec_objects;
};
#endif // #ifndef _FINDER_H
</code></pre>
<p>Der vector wird wie gewuenscht mit Objekten der abgeleiteten Klasse gefuellt.</p>
<pre><code class="language-cpp">// creating object+filling vector
ObjectName obj;
obj.setPos ( a_pos );
obj.setName ( a_name );
m_vec_objects.push_back ( obj );
</code></pre>
<p>Das Problem: Beim Zugriff auf 'ObjectName::getName' steht nur Mist im Speicher.</p>
<pre><code class="language-cpp">// fetching values
ObjectName* obj = reinterpret_cast&lt;ObjectName*&gt;find-&gt;doFind ( a_name );

obj-&gt;getPos();  // ok
obj-&gt;getName(); // not error but useless values
</code></pre>
<p>Hab ich einen schweren logischen Fehler gemacht?</p>
<p>PS: SuFu hat mir nicht weitergeholfen.<br />
PPS: Benutze MSVC++, denke aber das es eine Grundlegendes C++ Problem auf meiner Seite ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260783/polymorphie-und-_cast</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 22:43:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260783.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Feb 2010 10:48:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie und *_cast on Tue, 09 Feb 2010 10:48:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab ein kleines Problem/logischen Fehler mit Polymorphie:</p>
<p>Ich habe eine Basis-Klasse mit, wer denkt es sich schon?, Basis-Eigenschaften (class Object). Von dieser Klasse entsprechend abgeleitet Klassen mit Zusatz-Eigenschaften (class ObjectName oder weitere).</p>
<pre><code class="language-cpp">#ifndef _OBJECT_H
#define _OBJECT_H
class Object
{
public:
	Object ();
	virtual ~Object ();
	void setPos ( const float a_pos );
	float getPos ( ) const;
private:
	float m_f_pos;
};
#endif // #ifndef _OBJECT_H

#ifndef _OBJECT_STATION_H
#define _OBJECT_STATION_H
#include &quot;Object.h&quot;
class ObjectName : public Object
{
public:
	ObjectStation ();
	~ObjectStation ();
	void setName ( const string&amp; a_name );
	string getName ( ) const;
private:
	string m_str_name;
};
#endif // #ifndef _OBJECT_STATION_H
</code></pre>
<p>Zur Organisation der Objekte benutze ich einen vector mit Elementen der Basis-Klasse.</p>
<pre><code class="language-cpp">#ifndef _FINDER_H
#define _FINDER_H
class Finder
{
public:
	Finder ();
	~Finder ();
	Object* doFind ( const string&amp; a_name );
private:
	vector &lt; Object &gt; m_vec_objects;
};
#endif // #ifndef _FINDER_H
</code></pre>
<p>Der vector wird wie gewuenscht mit Objekten der abgeleiteten Klasse gefuellt.</p>
<pre><code class="language-cpp">// creating object+filling vector
ObjectName obj;
obj.setPos ( a_pos );
obj.setName ( a_name );
m_vec_objects.push_back ( obj );
</code></pre>
<p>Das Problem: Beim Zugriff auf 'ObjectName::getName' steht nur Mist im Speicher.</p>
<pre><code class="language-cpp">// fetching values
ObjectName* obj = reinterpret_cast&lt;ObjectName*&gt;find-&gt;doFind ( a_name );

obj-&gt;getPos();  // ok
obj-&gt;getName(); // not error but useless values
</code></pre>
<p>Hab ich einen schweren logischen Fehler gemacht?</p>
<p>PS: SuFu hat mir nicht weitergeholfen.<br />
PPS: Benutze MSVC++, denke aber das es eine Grundlegendes C++ Problem auf meiner Seite ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852958</guid><dc:creator><![CDATA[m.trix]]></dc:creator><pubDate>Tue, 09 Feb 2010 10:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und *_cast on Tue, 09 Feb 2010 11:03:15 GMT]]></title><description><![CDATA[<p>Google nach &quot;Slicing&quot;.<br />
Du speicherst Objekte im Vektor.<br />
Du willst Pointer auf Object in deiner Liste speichern!</p>
<pre><code class="language-cpp">vector &lt; Object* &gt; m_vec_objects;
</code></pre>
<p>// nachtrag<br />
Dann brauchst du auch keinen reinterpret_cast sondern einen dynamic_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852971</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Tue, 09 Feb 2010 11:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und *_cast on Wed, 10 Feb 2010 07:51:07 GMT]]></title><description><![CDATA[<p>Vielen Dank fuer die Antwort. Das ist eine Lösung und auch die die angewendet wurde.</p>
<pre><code class="language-cpp">#ifndef _FINDER_H
#define _FINDER_H
class Finder
{
public:
    Finder ();
    ~Finder ();
    Object* doFind ( const string&amp; a_name );
private:
    vector &lt; Object* &gt; m_vec_objects;
};
#endif // #ifndef _FINDER_H
</code></pre>
<pre><code class="language-cpp">// creating object+filling vector
ObjectName* obj = new ObjectName();
obj-&gt;setPos ( a_pos );
obj-&gt;setName ( a_name );
m_vec_objects.push_back ( obj );
</code></pre>
<pre><code class="language-cpp">// fetching values
ObjectName* obj = dynamic_cast&lt;ObjectName*&gt;find-&gt;doFind ( a_name );

obj-&gt;getPos();  // ok
obj-&gt;getName(); // ok
</code></pre>
<p>Passt wunderbar. Problem war allerdings, dass vector&lt;Object&gt; nicht durch mich sondern durch Zuarbeit entstanden ist. In Zusammenarbeit (einfach vector&lt;Object*&gt; war nicht genug...) mit der entsprechenden Person wurden die entsprechenden Änderungen eingepflegt und gut.</p>
<p>Merce!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1853425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1853425</guid><dc:creator><![CDATA[m.trix]]></dc:creator><pubDate>Wed, 10 Feb 2010 07:51:07 GMT</pubDate></item></channel></rss>