<?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 mit statischen klassenvariablen und vererbung]]></title><description><![CDATA[<p>hi leute,<br />
ich habe folgendes problem: ich habe die drei klassen MetaClass, Object und A. A ist von Object abgeleitet. beide haben eine statische klassenvariable MetaClass * meta_class, die beim programmstart mit einer neuen MetaClass initialisiert wird.<br />
Object hat außerdem die methode &quot;get_class_name()&quot; welche eine methode von MetaClass aufruft.</p>
<p>A erbt &quot;get_class_name()&quot; natürlich von Object. rufe ich in einem objekt von A aber get_class_name() auf, dann wird der klassenname von Object und nicht von A zurückgegeben.</p>
<p>hier der code:</p>
<pre><code>class Object {
public:
	virtual char const * get_class_name () const;
	Object ();
	virtual ~Object ();

	static MetaClass * meta_class;
};
MetaClass * Object::meta_class = new MetaClass(&quot;Object);

class A : public Object {
public:
	A () {}
	~A () {}

	static MetaClass * meta_class;
};
MetaClass * A::meta_class = new MetaClass(&quot;A&quot;);

char const * Object::get_class_name () const {
	return meta_class-&gt;get_client_class_name();
}

class MetaClass {
	const char * client_class_name;
public: 
	char const * get_client_class_name () const; 
	MetaClass (const char * client_class_name);
	~MetaClass (); 
};

char const * MetaClass::get_client_class_name () const {
	return client_class_name;
}

MetaClass::MetaClass(char const * client_name) : client_class_name(client_name) { }

int main() {
	Object o;
	std::cout &lt;&lt; o.get_class_name() &lt;&lt; std::endl;
	A a;
	std::cout &lt;&lt; a.get_class_name() &lt;&lt; std::endl;
	return 0;
}
</code></pre>
<p>beides gibt &quot;Object&quot; aus, obwohl der zweite aufruf &quot;A&quot; ausgeben müsste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>irgendwie liegt es daran, dass &quot;meta_class&quot; von Object genommen wird, und nicht von A.</p>
<p>hier ein screenshot vom debugger:<br />
<a href="http://pictureposter.allbrand.nu/pictures/johnnydanger/sonstiges/staticmetaclass.JPG" rel="nofollow">http://pictureposter.allbrand.nu/pictures/johnnydanger/sonstiges/staticmetaclass.JPG</a></p>
<p>in grün seht ihr die meta_class die eigentlich genommen werden sollte und im this-zeiger ja auch drinnen steht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /><br />
in rot seht ihr die meta_class die stattdessen genommen wird. wie kann ich dem programm sagen, doch bitte die meta_class von A zu nehmen (weil ja auch die methode von einem objekt der klasse A aufgerufen wird) und nicht die meta_class von Object?</p>
<p>vielen dank!<br />
lg johnny</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143542/problem-mit-statischen-klassenvariablen-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 06:48:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143542.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Apr 2006 15:39:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit statischen klassenvariablen und vererbung on Sun, 09 Apr 2006 15:39:53 GMT]]></title><description><![CDATA[<p>hi leute,<br />
ich habe folgendes problem: ich habe die drei klassen MetaClass, Object und A. A ist von Object abgeleitet. beide haben eine statische klassenvariable MetaClass * meta_class, die beim programmstart mit einer neuen MetaClass initialisiert wird.<br />
Object hat außerdem die methode &quot;get_class_name()&quot; welche eine methode von MetaClass aufruft.</p>
<p>A erbt &quot;get_class_name()&quot; natürlich von Object. rufe ich in einem objekt von A aber get_class_name() auf, dann wird der klassenname von Object und nicht von A zurückgegeben.</p>
<p>hier der code:</p>
<pre><code>class Object {
public:
	virtual char const * get_class_name () const;
	Object ();
	virtual ~Object ();

	static MetaClass * meta_class;
};
MetaClass * Object::meta_class = new MetaClass(&quot;Object);

class A : public Object {
public:
	A () {}
	~A () {}

	static MetaClass * meta_class;
};
MetaClass * A::meta_class = new MetaClass(&quot;A&quot;);

char const * Object::get_class_name () const {
	return meta_class-&gt;get_client_class_name();
}

class MetaClass {
	const char * client_class_name;
public: 
	char const * get_client_class_name () const; 
	MetaClass (const char * client_class_name);
	~MetaClass (); 
};

char const * MetaClass::get_client_class_name () const {
	return client_class_name;
}

MetaClass::MetaClass(char const * client_name) : client_class_name(client_name) { }

int main() {
	Object o;
	std::cout &lt;&lt; o.get_class_name() &lt;&lt; std::endl;
	A a;
	std::cout &lt;&lt; a.get_class_name() &lt;&lt; std::endl;
	return 0;
}
</code></pre>
<p>beides gibt &quot;Object&quot; aus, obwohl der zweite aufruf &quot;A&quot; ausgeben müsste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>irgendwie liegt es daran, dass &quot;meta_class&quot; von Object genommen wird, und nicht von A.</p>
<p>hier ein screenshot vom debugger:<br />
<a href="http://pictureposter.allbrand.nu/pictures/johnnydanger/sonstiges/staticmetaclass.JPG" rel="nofollow">http://pictureposter.allbrand.nu/pictures/johnnydanger/sonstiges/staticmetaclass.JPG</a></p>
<p>in grün seht ihr die meta_class die eigentlich genommen werden sollte und im this-zeiger ja auch drinnen steht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /><br />
in rot seht ihr die meta_class die stattdessen genommen wird. wie kann ich dem programm sagen, doch bitte die meta_class von A zu nehmen (weil ja auch die methode von einem objekt der klasse A aufgerufen wird) und nicht die meta_class von Object?</p>
<p>vielen dank!<br />
lg johnny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033902</guid><dc:creator><![CDATA[steininger]]></dc:creator><pubDate>Sun, 09 Apr 2006 15:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit statischen klassenvariablen und vererbung on Mon, 10 Apr 2006 06:34:04 GMT]]></title><description><![CDATA[<p>steininger schrieb:</p>
<blockquote>
<p>wie kann ich dem programm sagen, doch bitte die meta_class von A zu nehmen (weil ja auch die methode von einem objekt der klasse A aufgerufen wird) und nicht die meta_class von Object?</p>
</blockquote>
<p>Das Problem liegt in der Funktion Object::get_class_name. Dies ist eine Funktion der Basisklasse, also wird auch meta_class der Basisklasse verwendet. Du müsstest A ebenfalls eine solche Funktion spendieren. Und damit das korrekt über die Vererbungshierarchie hinweg funktioniert, müsste die Funktion dann virtuell sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034240</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 10 Apr 2006 06:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit statischen klassenvariablen und vererbung on Mon, 10 Apr 2006 11:18:25 GMT]]></title><description><![CDATA[<p>...wenn meine klasse mehrere solche methoden hat, dann muss ich ja immer extra alle methoden überschreiben?</p>
<p>und das ganze immer wenn ich eine neue klasse ableite? gibts keine möglichkeit die datenkomponente &quot;dynamisch zu binden&quot;, also die klasse dazu zu bringen, auch die eigene meta_class zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034385</guid><dc:creator><![CDATA[steininger]]></dc:creator><pubDate>Mon, 10 Apr 2006 11:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit statischen klassenvariablen und vererbung on Mon, 10 Apr 2006 11:41:11 GMT]]></title><description><![CDATA[<p>Mit einer virtuellen Methode die den Zugriff auf das Meta Daten Objekt liefert sollte es gehen. Dann müsste nur diese überschrieben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034408</guid><dc:creator><![CDATA[Newow]]></dc:creator><pubDate>Mon, 10 Apr 2006 11:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit statischen klassenvariablen und vererbung on Mon, 10 Apr 2006 11:51:11 GMT]]></title><description><![CDATA[<p>ES GEHT! YEEEES :D:D::D:D:D::DD</p>
<p>daaaaaaaaaaaaaaaaaaaaaaaaaaaaannnnnnnke!!! ein hoch auf den noblen spender <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034416</guid><dc:creator><![CDATA[steininger]]></dc:creator><pubDate>Mon, 10 Apr 2006 11:51:11 GMT</pubDate></item></channel></rss>