<?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[Object identifizieren]]></title><description><![CDATA[<p>Hallöle,</p>
<p>ich habe ein sehr einfaches Problem, worauf es sicher auch eine einfache Lösung gibt, hoffe ich <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>Ich habe ein Programm mit Vererbung gemacht.</p>
<p>meine Klassen A B und C erben von der Klasse Buchstaben.</p>
<p>die Objekte der Klassen A,B,C schiebe ich alle in einen Vector &lt;Buchstaben *&gt;</p>
<p>irgendwann möchte ich aber diese Objekte wieder rausholen und wissen was es ist, also ob A, B oder C. gibt es hier eine einfache Möglichkeit?</p>
<p>Bisher ist mir nur eingefallen, dass ich aufgrund des Polymorphismuses eine Methode get_Type oder so machen könnte^^, aber ich würde nur ungern so etwas implementieren</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225939/object-identifizieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 06:06:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225939.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Oct 2008 11:24:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 11:24:02 GMT]]></title><description><![CDATA[<p>Hallöle,</p>
<p>ich habe ein sehr einfaches Problem, worauf es sicher auch eine einfache Lösung gibt, hoffe ich <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>Ich habe ein Programm mit Vererbung gemacht.</p>
<p>meine Klassen A B und C erben von der Klasse Buchstaben.</p>
<p>die Objekte der Klassen A,B,C schiebe ich alle in einen Vector &lt;Buchstaben *&gt;</p>
<p>irgendwann möchte ich aber diese Objekte wieder rausholen und wissen was es ist, also ob A, B oder C. gibt es hier eine einfache Möglichkeit?</p>
<p>Bisher ist mir nur eingefallen, dass ich aufgrund des Polymorphismuses eine Methode get_Type oder so machen könnte^^, aber ich würde nur ungern so etwas implementieren</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605451</guid><dc:creator><![CDATA[Somersault]]></dc:creator><pubDate>Mon, 27 Oct 2008 11:24:02 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 11:30:55 GMT]]></title><description><![CDATA[<p>Ja, gibt es, einfach 3 Vektoren nehmen:<br />
<code>std::vector&lt;A*&gt;</code><br />
<code>std::vector&lt;B*&gt;</code><br />
<code>std::vector&lt;C*&gt;</code></p>
<p>Man sollte ein Objekt nicht Upcasten, wenn man eigentlich die abgeleitete Klasse weiterhin benötigt.</p>
<p>Man kann allerdings <code>dynamic_cast</code> verwenden, um zu testen, bzw. einen Downcast durchzuführen:</p>
<pre><code class="language-cpp">Buchstabe* b = new A;

A* a = dynamic_cast&lt;A*&gt;(b);

if(a)
{
  // gültig
}
else
{
  // ungültig
}

delete a;
</code></pre>
<p>Allerdings sei ganz klar gesagt, das in 99% der Fäll ein <code>dynamic_cast</code> für einen Designfehler spricht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605455</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 27 Oct 2008 11:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 12:02:40 GMT]]></title><description><![CDATA[<p>Somersault schrieb:</p>
<blockquote>
<p>...<br />
irgendwann möchte ich aber diese Objekte wieder rausholen und wissen was es ist, also ob A, B oder C. ...</p>
</blockquote>
<p>Die entscheidende Frage ist: Wozu ?<br />
(üblicherweise braucht man das nämlich nicht mehr zu &quot;wissen&quot;, sondern will etwas damit tun - und genau dafür sind &quot;virtual functions&quot; (&quot;Polymorphie&quot;) gedacht und ideal.)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605475</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 27 Oct 2008 12:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 13:14:25 GMT]]></title><description><![CDATA[<p>Ja, in der Regel wollte ich sowas triviales machen wie: berechne, je nachdem hätte das Programm die richtige Methode verwendet.</p>
<p>Jetzt bekomme ich aber über das Netzwerk ständig Aktualisierungen rein...<br />
d.h. A, B oder C können sich entweder ändern oder ganz verschwinden.</p>
<p>Ich habe also meinen vector std::vector&lt;Buchstaben *&gt; und möchte z.B. alle Objekte der Klasse A überprüfen.. Das Ziel ist, jene rauszuschmeißen, die nicht mehr gebraucht werden. Somit möchte ich schon von vornherein die andere Objekte unberührt von dieser Überprüfung lassen. Quasi überspringen.</p>
<p>Cool wäre sowas wie:</p>
<pre><code>std::vector&lt;Buchstaben *&gt; Buchstabensuppe;

// in Schleife
if (Buchstabensuppe.at(i).getObject.getClassNameAsString == &quot;A&quot;){
      // überprüfe
}
</code></pre>
<p>Aber ich glaube sowas gibts wohl nicht in C++;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605511</guid><dc:creator><![CDATA[Somersault]]></dc:creator><pubDate>Mon, 27 Oct 2008 13:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 13:36:21 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein sowas wäre gar nicht cool, das wäre wegen dem extra String-Vergleich ineffizient (da ist sogar dynamic_cast effizienter).<br />
Höre auf die Vorposter, und überleg dir lieber ob dein Konzept noch zur Aufgabe passt. Als einfache Lösung könntest du die Basisklasse <em>Buchstaben</em> um eben die abstrakte oder virtuelle Methode erweitern die du in den Unterklassen brauchst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605522</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 27 Oct 2008 13:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 13:40:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;Buchstaben *&gt; Buchstabensuppe;

class Buchstabe{
protected:
virtual char GetType();
};

class A : public Buchstabe{
public:
 char GetType(){ return 'A'};
};

class B : public Buchstabe{
public:
 char GetType(){ return 'B'};
};

class C : public Buchstabe{
public:
 char GetType(){ return 'C'};
};

//Schleife
if (Buchstabensuppe.at(i).GetType()== 'A'){
      // überprüfe
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1605523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605523</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 27 Oct 2008 13:40:12 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 13:46:23 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a>: macht ein String (oder Char) Vergleich das ganze so ineffizienter?</p>
<p>Der Sinn des ganzem was ich tun soll ist das ganze schneller zu machen...<br />
Was für eine Ironie <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/1605529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605529</guid><dc:creator><![CDATA[Somersault]]></dc:creator><pubDate>Mon, 27 Oct 2008 13:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 14:32:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ein Vergleich von Strings bedeutet immer das alle Buchstaben nacheinander verglichen werden, bis der erste Unterschied gefunden wird. Im Vergleich dazu können Integer in einem Durchgang verglichen werden.<br />
dynamic_cast ist selber auch nicht das Optimum, da ziehe ich dann doch virtuelle Funktionen in der Basisklasse vor, wie zu letzt von Boris gezeigt. Allerdings ohne noch über den Umweg einer Namensprüfung, sondern gleich direkt die für dich interessante Methode</p>
<pre><code class="language-cpp">class Buchstabe
{
  ...
  // Deine Prüfung für eine Instanz, Parameter je nachdem was du brauchst
  virtual bool Check(...) const = 0; 
};

class A
{
  ...
  // Implementation für diese Klasse, im einfachsten Fall true oder false zurückgeben
  virtual bool Check(...) const
  {
    return true;
  } 
}
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605559</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 27 Oct 2008 14:32:08 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 14:48:55 GMT]]></title><description><![CDATA[<p>vielen Dank!</p>
<p>ich denke, jetzt verstehe ich es (fast).</p>
<p>Die Variente mit dem bool funktioniert aber nur bei 2 Klassen, die Erben, oder? -wenn ich mehr habe, und die alle Unterscheiden will, brauch ich 'chars' bzw Integer, oder?</p>
<p>Ich bin ein ziemlicher Neuling mit C++. Darf ich kurz fragen ob es ein Unterschied, zwischen:</p>
<p>virtual bool Check() = 0;<br />
und<br />
virtual bool Check() const = 0;<br />
gibt?<br />
Bedeutet dies, dass die Fkt. Konstant ist? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605575</guid><dc:creator><![CDATA[Somersault]]></dc:creator><pubDate>Mon, 27 Oct 2008 14:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 14:55:17 GMT]]></title><description><![CDATA[<p>Somersault schrieb:</p>
<blockquote>
<p>virtual bool Check() const = 0;<br />
...<br />
Bedeutet dies, dass die Fkt. Konstant ist? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Es bedeutet, das die Funktion keine Membervariablen ändert und ist somit auch aufrufbar, und kann daher auch auf ein konstantes Objekt angewendet werden.</p>
<p>Siehe hierzu auch <a href="http://www.parashift.com/c++-faq-lite/const-correctness.html" rel="nofollow">const-correctness</a>.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605581</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 27 Oct 2008 14:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 14:58:53 GMT]]></title><description><![CDATA[<p>Also, der Ansatz über die Basisklasse zu gehen, wenn eigentlich abgeleitete Objekte benötigt werden, ist grundsätzlich erstmal suboptimal.<br />
Ich würde jeden Typen in einer eigenen Liste verwalten, und dann dafür Funktionen überladen, sofern möglich. Wenn nicht, muss man über unterschiedliche Funktionsnamen unterscheiden. Wie dem auch sei, der Aufwand ist auch nicht größer, als jeden Typen mit einem selbstgebastelten TypeID-System zu prüfen. Und performanter ist er mit Sicherheit.</p>
<p>Mit ein paar Informationen darüber, wie die Auswahl der zu löschenden Objekte zustande kommt, könnte man vielleicht noch weiter helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605590</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 27 Oct 2008 14:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to Object identifizieren on Mon, 27 Oct 2008 15:56:42 GMT]]></title><description><![CDATA[<p>Somersault schrieb:</p>
<blockquote>
<p>Cool wäre sowas wie:</p>
<pre><code>std::vector&lt;Buchstaben *&gt; Buchstabensuppe;

// in Schleife
if (Buchstabensuppe.at(i).getObject.getClassNameAsString == &quot;A&quot;){
      // überprüfe
}
</code></pre>
</blockquote>
<p>Übergib doch die Aktualisierungen an die einzelnen Objekte in deinem Container und die entscheiden dann selber was zu tun ist (Polymorphie ausnutzen).<br />
Oder du machst sowas wie das visitor-Pattern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605624</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 27 Oct 2008 15:56:42 GMT</pubDate></item></channel></rss>