<?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[Durch Basisklasse auf abgeleitete Klasse zugreifen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Seit Tagen zerbreche ich mir den Kopf darüber wie eine solches Problem gelöst werden kann. Ich hoffe jemand da draußen kann mir irgendwie helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Am Code darf nicht verändert werden: Alle Klassen, die Funktion printData</p>
<pre><code>[cpp]
#include &lt;iostream&gt;
using namespace std;

enum classType {basisclass, classA, classB}; // Hiermit wird unterschieden um welche Klasse es sich handelt.

class Basisklasse {
int foo;
public:
	Basisklasse(int f=0) {foo=f;typ=basisclass;}
	void printBasis() {cout &lt;&lt; &quot;foo: &quot; &lt;&lt; foo &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
	classType typ;
};

class A : public Basisklasse {
int x;
public:
	A(int f=0) {x=f;typ=classA;}
	void printA() {cout &lt;&lt; &quot;x: &quot; &lt;&lt; x &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
};

class B : public Basisklasse {
int y;
public:
	B(int f=0) {y=f; typ=classB;}
	void printB() {cout &lt;&lt; &quot;y: &quot; &lt;&lt; y &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
};

void printData(Basisklasse *basisPtr) {
/*
Hier soll mittels basisPtr-&gt;typ entschieden werden um welchen Klassentyp es sich handelt, um dann die jeweilige Methode aufzurufen. z.B.:
if(basisPtr-&gt;typ==classA) {
	// Hier soll nun die Funktion printA() aus der Klasse A aufgerufen werden
}
*/
}

int main() {
/* Hier ist alles variabel */
}
[/cpp]
</code></pre>
<p>Ich hoffe durch die Kommentare in der printData Funktion ist die Problemstellung klar.</p>
<p>Vielleicht ist es auch sehr einfach zu lösen, und ich habe einfach nur ein Brett vor dem Kopf.<br />
Jedenfalls bin ich über jeden Hinweis dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297799/durch-basisklasse-auf-abgeleitete-klasse-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 06:39:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297799.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Jan 2012 05:48:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 05:48:21 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Seit Tagen zerbreche ich mir den Kopf darüber wie eine solches Problem gelöst werden kann. Ich hoffe jemand da draußen kann mir irgendwie helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Am Code darf nicht verändert werden: Alle Klassen, die Funktion printData</p>
<pre><code>[cpp]
#include &lt;iostream&gt;
using namespace std;

enum classType {basisclass, classA, classB}; // Hiermit wird unterschieden um welche Klasse es sich handelt.

class Basisklasse {
int foo;
public:
	Basisklasse(int f=0) {foo=f;typ=basisclass;}
	void printBasis() {cout &lt;&lt; &quot;foo: &quot; &lt;&lt; foo &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
	classType typ;
};

class A : public Basisklasse {
int x;
public:
	A(int f=0) {x=f;typ=classA;}
	void printA() {cout &lt;&lt; &quot;x: &quot; &lt;&lt; x &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
};

class B : public Basisklasse {
int y;
public:
	B(int f=0) {y=f; typ=classB;}
	void printB() {cout &lt;&lt; &quot;y: &quot; &lt;&lt; y &lt;&lt; endl;} // Die Methode welche aufgerufen werden soll
};

void printData(Basisklasse *basisPtr) {
/*
Hier soll mittels basisPtr-&gt;typ entschieden werden um welchen Klassentyp es sich handelt, um dann die jeweilige Methode aufzurufen. z.B.:
if(basisPtr-&gt;typ==classA) {
	// Hier soll nun die Funktion printA() aus der Klasse A aufgerufen werden
}
*/
}

int main() {
/* Hier ist alles variabel */
}
[/cpp]
</code></pre>
<p>Ich hoffe durch die Kommentare in der printData Funktion ist die Problemstellung klar.</p>
<p>Vielleicht ist es auch sehr einfach zu lösen, und ich habe einfach nur ein Brett vor dem Kopf.<br />
Jedenfalls bin ich über jeden Hinweis dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164734</guid><dc:creator><![CDATA[various]]></dc:creator><pubDate>Sat, 07 Jan 2012 05:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:38:59 GMT]]></title><description><![CDATA[<p>Wo wird eigentlich &quot;typ&quot; deklariert? Wie auch immer, virtual ist die Lösung: <a href="http://ideone.com/hsnPN" rel="nofollow">http://ideone.com/hsnPN</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;memory&gt;

class A
{
public:
  virtual ~A()
  {}
  virtual void foo()
  {
    std::cout &lt;&lt; &quot;foo A\n&quot;;
  }
};

class B : public A
{
public:
  virtual void foo()
  {
    std::cout &lt;&lt; &quot;foo B\n&quot;;
  }
};

void print(A *a)
{
  a-&gt;foo();
}

int main()
{
  std::unique_ptr&lt;B&gt; p(new B);
  print(p.get());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2164735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164735</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:29:21 GMT]]></title><description><![CDATA[<p>Du könntest ganz THEORETISCH auch typeid(objekt) == typeid(Klassenname) machen, natürlich ist die Version von <s>PI</s> cooky451 allerdings sehr viel besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164740</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:24:19 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>natürlich ist die Version von PI allerdings sehr viel besser.</p>
</blockquote>
<p>Ich bin doch keine Zahl. -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164741</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:28:37 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>natürlich ist die Version von PI allerdings sehr viel besser.</p>
</blockquote>
<p>Ich bin doch keine Zahl. -.-</p>
</blockquote>
<p>Ups, die von Cooky :xmas1:</p>
<p>Edit: und nochwas: Wenn du einen basisklassenpointer hast, wird der auch dereferenziert nix als als public deklarierte <strong>Basisklassen</strong>member behandeln könn'n <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164742</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:38:21 GMT]]></title><description><![CDATA[<p>@cooky: Da fehlt der virtuelle Dtor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164743</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Sat, 07 Jan 2012 07:39:37 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>@cooky: Da fehlt der virtuelle Dtor.</p>
</blockquote>
<p>Gerade korrigiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164745</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Jan 2012 07:39:37 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Mon, 09 Jan 2012 03:17:56 GMT]]></title><description><![CDATA[<p>Hi, erstmal danke für die Hilfe!</p>
<p>Zur Lösung des Problems hat es allerdings gehört dass die Klassen nicht verändert werden dürfen. Hätte ich vielleicht noch klarer ausdrücken sollen.</p>
<p>Jedenfalls kam ich auf eine, wenn auch nicht schöne, Lösung.</p>
<p>Durch eine explizite Typenumwandlung ist es möglich:</p>
<pre><code>[cpp]
void printData(Basisklasse *basisPtr) {
if(basisPtr-&gt;typ==classA) {
	( (A* )basisPtr)-&gt;printA(); break;
}
//etc.
}
int main() {
Basisklasse *basisPtr;
A objA;
basisPtr = &amp;objA;
printData(basisPtr);
return 0;
}
[/cpp]
</code></pre>
<p>Falls ihr noch andere Lösungen kennt würde ich sie dennoch gerne hören <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165625</guid><dc:creator><![CDATA[various]]></dc:creator><pubDate>Mon, 09 Jan 2012 03:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Mon, 09 Jan 2012 07:45:32 GMT]]></title><description><![CDATA[<p>Wo kommt die Aufgabe denn her? Klingt nach ziemlich miesem Lehrmaterial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165651</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 09 Jan 2012 07:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Basisklasse auf abgeleitete Klasse zugreifen on Mon, 09 Jan 2012 11:42:52 GMT]]></title><description><![CDATA[<p>Du kannst keine Funktion einer Abgeleiteten Klasse mit einem Basisklassenzeiger aufrufen. 'S geht einfach nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165701</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 09 Jan 2012 11:42:52 GMT</pubDate></item></channel></rss>