<?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[Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden]]></title><description><![CDATA[<p>HAbe Basis Klasse A und davon abgeleitet B und C!!</p>
<pre><code class="language-cpp">B *pB= new B();
C *pC= new C();

A *p= pB;
A *p= pC;
</code></pre>
<p>wie bekomm ich nun rauser welcher sub typ p ist???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160453/subklasse-typ-aus-basisklassen-objekt-zeiger-rausfinden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:22:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160453.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Sep 2006 04:17:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 04:17:06 GMT]]></title><description><![CDATA[<p>HAbe Basis Klasse A und davon abgeleitet B und C!!</p>
<pre><code class="language-cpp">B *pB= new B();
C *pC= new C();

A *p= pB;
A *p= pC;
</code></pre>
<p>wie bekomm ich nun rauser welcher sub typ p ist???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144387</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 26 Sep 2006 04:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 05:22:47 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=9713" rel="nofollow">estartu</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144394</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 26 Sep 2006 05:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 05:30:28 GMT]]></title><description><![CDATA[<p>Du kannst den pointer dynamic_cast'en (in den entsprechenden Subpointertyp). Falls 0 rauskommt ist es nicht der Untertyp, andernfalls schon und du kriegst einen Pointer auf die abgelittene Klasse.<br />
Aber eigentlich widerspricht das dem Konzept von Vererbung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144397</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Tue, 26 Sep 2006 05:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 07:02:36 GMT]]></title><description><![CDATA[<p>Am besten solltest du dein Design so entwickeln, daß du gar nicht selber nach dem Typ fragen mußt - alle wichtigen Methoden werden von A abstrakt deklariert und von den Kindklassen mit dem richtigen Verhalten ausgefüllt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144438</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 07:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 07:20:44 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>...wie bekomm ich nun rauser welcher sub typ p ist???</p>
</blockquote>
<p>Warum solltest Du das ?<br />
Wenn es wirklich sein sollte (und ich denke, dass das höchstens zu Testzwecken sinnvoll ist), kannst Du A eine virtuelle Funktion geben, die das Gewünschte liefert:</p>
<pre><code class="language-cpp">class A {
public:
    ...    
    virtual std::string whoami() { return &quot;A&quot;; }
};

class B {
public:
    ...    
    virtual std::string whoami() { return &quot;B&quot;; }
};

class C {
public:
    ...    
    virtual std::string whoami() { return &quot;C&quot;; }
};

int main(void) {
    A* pC = new C;
    A* pB = new B;

    std::cout &lt;&lt; pC-&gt;whoami() &lt;&lt; &quot;\n&quot;; // -&gt; liefert &quot;C&quot;
    std::cout &lt;&lt; pB-&gt;whoami() &lt;&lt; &quot;\n&quot;; // -&gt; liefert &quot;B&quot;
...
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Aber wie gesagt: Ich rate dringend davon ab, das ernstlich in seinem Programm zu verwenden !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144453</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 26 Sep 2006 07:20:44 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 07:49:46 GMT]]></title><description><![CDATA[<p>also wenn du Objecte hast zum vergleichen wie zum beispiel eine Liste, Combobox, Edit usw. dann sollte volgendes funzen<br />
if(((CListCtrl*)GetDlgItem(IDC_LIST)) == p)</p>
<p>wenn du nen dialog hast kann ich jetzt nur raten (werd das nach her mal testen)<br />
if(((CDialog*)GetDlgItem(IDD_DIALOG_DLG)) == p)</p>
<p>mfg<br />
LowFly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144468</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Tue, 26 Sep 2006 07:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 07:52:20 GMT]]></title><description><![CDATA[<p>LowFly schrieb:</p>
<blockquote>
<p>also wenn du Objecte hast zum vergleichen wie zum beispiel eine Liste, Combobox, Edit usw. dann sollte volgendes funzen<br />
if(((CListCtrl*)GetDlgItem(IDC_LIST)) == p)</p>
<p>wenn du nen dialog hast kann ich jetzt nur raten (werd das nach her mal testen)<br />
if(((CDialog*)GetDlgItem(IDD_DIALOG_DLG)) == p)</p>
<p>mfg<br />
LowFly</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Das sollte mich schwer überraschen !<br />
Das hieße ja, dass es letztlich nur ein einziges Objekt (pro Klasse oder evtl. pro Kontext) im Speicher gäbe....<br />
Allgemeingültig dürfte diese &quot;Lösung&quot; jedenfalls nicht sein.<br />
Aber vielleicht habe ich auch zuwenig Ahnung von GetDlgItem() ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144471</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 26 Sep 2006 07:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 08:20:37 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Aber wie gesagt: Ich rate dringend davon ab, das ernstlich in seinem Programm zu verwenden !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Ich habe mir jetzt keinen praktischen Nutzen überlegt, aber was spricht da dagegen?? Wieso rätst du dringend davon ab??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144494</guid><dc:creator><![CDATA[electron]]></dc:creator><pubDate>Tue, 26 Sep 2006 08:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 08:22:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a><br />
na dann lass dich mal überraschen<br />
anscheinend ist es dir entgangen das es möglich ist sich über mehrer<br />
arten einen zeiger auf eine classe zu holen.</p>
<p>aber wie du schon richtig erwähnst</p>
<blockquote>
<p>Aber vielleicht habe ich auch zuwenig Ahnung von GetDlgItem() ....</p>
</blockquote>
<p>nicht nur vieleicht sondern mit absoluter sicherheit sogar. <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>
<pre><code>((CListCtrl*)GetDlgItem(IDC_)
</code></pre>
<p>gibt dir nämlich einen zeiger auf die Classe zurück die an das Object gebunden ist.<br />
aus diesem grund auch die Classe davor. Es ist es genau das gleiche als wenn<br />
du dir den zeiger wie folgt holst.</p>
<pre><code>CListCtrl *pListCtrl = new CListCtrl();
</code></pre>
<p>mfg<br />
LowFly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144497</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Tue, 26 Sep 2006 08:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 08:24:00 GMT]]></title><description><![CDATA[<p>Electron schrieb:</p>
<blockquote>
<p>Ich habe mir jetzt keinen praktischen Nutzen überlegt, aber was spricht da dagegen?? Wieso rätst du dringend davon ab??</p>
</blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Am besten solltest du dein Design so entwickeln, daß du gar nicht selber nach dem Typ fragen mußt - alle wichtigen Methoden werden von A abstrakt deklariert und von den Kindklassen mit dem richtigen Verhalten ausgefüllt.</p>
</blockquote>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144498</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 26 Sep 2006 08:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 08:40:24 GMT]]></title><description><![CDATA[<p>LowFly schrieb:</p>
<blockquote>
<p>...</p>
<pre><code>((CListCtrl*)GetDlgItem(IDC_)
</code></pre>
<p>gibt dir nämlich einen zeiger auf die Classe zurück die an das Object gebunden ist....</p>
<pre><code>CListCtrl *pListCtrl = new CListCtrl();
</code></pre>
<p>mfg<br />
LowFly</p>
</blockquote>
<p>Das hatte ich auch so verstanden, aber üblicherweise liefert ein new eine andere Adresse als die des Objektes, das man gerade in der Hand hält.</p>
<pre><code class="language-cpp">int* p1 = new int;
    int* p2 = new int;
    if(p1 == p2) std::cout &lt;&lt; &quot;ich fress' 'nen Besen&quot;;
</code></pre>
<p><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>
<p>BTW: Was ein &quot;Zeiger auf eine Klasse&quot; ist, weiß ich nicht wirklich.<br />
Es kann natürlich sein, dass in Deinem Code &quot;IDC_LIST&quot; irgendwie mit der Instanz p verknüft ist und GetDlgItem() kein neues Objekt erzeugt, sondern das assoziierte zurückgibt (von dem man angeblich nicht weiß, welchen Typs es ist).</p>
<p>Dann liegt aber die eigentlich &quot;Klassenüberprüfungslogik&quot; in dem abschließenden cast (CListCtrl*), der vermutlich sowas wie einen dynamic_cast durchführt.<br />
Der wiederum klappt nur dann, wenn das Objekt der Klasse angehört. In dem Fall wäre das ein gangbarer Weg, aber der GetDlgItem()-Call ist dann vollkommen überflüssig ... man ist dann wieder beim &quot;dynamic_cast-Vorschlag&quot; von bluecode.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144503</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 26 Sep 2006 08:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to Subklasse- Typ aus Basisklassen Objekt (Zeiger) rausfinden on Tue, 26 Sep 2006 08:33:02 GMT]]></title><description><![CDATA[<p>electron schrieb:</p>
<blockquote>
<p>...Ich habe mir jetzt keinen praktischen Nutzen überlegt, aber was spricht da dagegen?? Wieso rätst du dringend davon ab??</p>
</blockquote>
<p>Weil man damit die Möglichkeiten der Vererbung aushebelt/umgeht. So ein Design wird ganz schnell unwartbartbar/unzuverlässig. Man verheddert sich dann ganz schnell in der Frage, in welcher Klasse/Funktion denn jetzt eigentlich was implementiert ist. Bei kleineren &quot;Spielanwendungen&quot; fällt das noch nicht so auf, aber sobald man ein paar Hundert Zeilen zusammen hat, wird das zunehmend problematischer.</p>
<p>Wir hatten mal einen externen MA im Projekt, der uns sowas eingebrockt hat und glaub' mir: Wir fluchen auch nach 5 Jahre noch darüber !</p>
<p>Letztlich gilt: Niemand kennt die Obbjekte so gut, wie der Compiler. Man sollte nicht versuchen, ihm das abzunehmen. <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144505</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 26 Sep 2006 08:33:02 GMT</pubDate></item></channel></rss>