<?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[Klasse eines Objekts herausfinden]]></title><description><![CDATA[<p>Hallo,<br />
<strong>ich will die Klasse eines Objekts herausfinden.</strong></p>
<p>Der Grund ist folgender:<br />
Ich habe eine Klasse nennen wir sie Auto.<br />
Von der Klasse erbt jetzt die Klasse BMW, Audi, VW.</p>
<p>Dann habe ich eine Liste z.B. QList, oder std::vector ganz egal,<br />
da können Elemente vom Typ Auto rein, also sind dort dann BMWs,Audis, VWs drin.</p>
<p>Jetzt möchte ich ein Element aus der Liste herausholen und gucken, was für ein Auto es ist. Wie kann ich das machen, ohne dem jeweiligen Object ein Attribut zu geben.</p>
<p>Liebe Grüße und allen ein frohes Fest 2009<br />
KmG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257181/klasse-eines-objekts-herausfinden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 11:11:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257181.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Dec 2009 10:56:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 10:56:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
<strong>ich will die Klasse eines Objekts herausfinden.</strong></p>
<p>Der Grund ist folgender:<br />
Ich habe eine Klasse nennen wir sie Auto.<br />
Von der Klasse erbt jetzt die Klasse BMW, Audi, VW.</p>
<p>Dann habe ich eine Liste z.B. QList, oder std::vector ganz egal,<br />
da können Elemente vom Typ Auto rein, also sind dort dann BMWs,Audis, VWs drin.</p>
<p>Jetzt möchte ich ein Element aus der Liste herausholen und gucken, was für ein Auto es ist. Wie kann ich das machen, ohne dem jeweiligen Object ein Attribut zu geben.</p>
<p>Liebe Grüße und allen ein frohes Fest 2009<br />
KmG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827207</guid><dc:creator><![CDATA[KmG]]></dc:creator><pubDate>Thu, 24 Dec 2009 10:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 10:59:02 GMT]]></title><description><![CDATA[<p><a href="https://www.google.de/search?&amp;q=c%2B%2B%20typeid" rel="nofollow">Google: c++ typeid</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827210</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 24 Dec 2009 10:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 11:20:04 GMT]]></title><description><![CDATA[<p>KmG schrieb:</p>
<blockquote>
<p>Wie kann ich das machen, ohne dem jeweiligen Object ein Attribut zu geben.</p>
</blockquote>
<p>Mit einer virtuellen Funktion.<br />
Willst Du dann ein switch oder if dranbasteln, was anhand des wirklichen Typs des Objekts unterschiedliche Sachen macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827223</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 24 Dec 2009 11:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 12:14:18 GMT]]></title><description><![CDATA[<p>Ich will die Liste durchgehen, und dann die &quot;richtigen&quot; Objekte in ne andere Liste stecken. Also wir da schon nen if bzw. switch dahinter kommen.</p>
<p>Die virtuelle Methode packe ich dann die Klasse Auto oder? Ich weiß noch nicht genau, was die virtuelle Methode dann machen soll. Auf jeden Fall soll die ja dann mir etwas zurückgeben, wenn ich ein Element aus meiner Liste hole und die Methode von dem Element aufrufe. Hättest du vllt. nen Code Beispiel?</p>
<p>LG<br />
KmG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827261</guid><dc:creator><![CDATA[KmG]]></dc:creator><pubDate>Thu, 24 Dec 2009 12:14:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 12:22:00 GMT]]></title><description><![CDATA[<p><code>typeid</code> brauchst du deswegen immer noch nicht. Eher <code>dynamic_cast</code> , falls es wirklich nicht mit virtuellen Funktionen geht.</p>
<p>Was sind die &quot;richtigen&quot; Objekte? Besitzen die eine gemeinsame Eigenschaft, die du eventuell auch sonst irgendwo brauchst? Falls ja, können sich virtuelle Funktionen bereits lohnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827263</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Dec 2009 12:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 12:33:22 GMT]]></title><description><![CDATA[<p>Die richtigen Objekte sind z.B. blaue BMWs, dafür wollte ich erst gucken, ob das Objekt ein BMW ist und dann im zweiten Schritt, ob der BMW blau ist. Aber es wird vermutlich kein Attribut geben, was den BMW eindeutig von den anderen Autos unterscheidet.</p>
<p>Wie wäre der Ansatz mit dynamic_cast ? Haben casts Rückgabe Werte?<br />
Mit typeid hat mir in dem Zusammenhang wenig geholfen, die Id war immer Auto egal obs nen BMW oder nen VW war.</p>
<p>Gruß<br />
KmG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827267</guid><dc:creator><![CDATA[KmG]]></dc:creator><pubDate>Thu, 24 Dec 2009 12:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 12:39:31 GMT]]></title><description><![CDATA[<p>KmG schrieb:</p>
<blockquote>
<p>Wie wäre der Ansatz mit dynamic_cast ? Haben casts Rückgabe Werte?</p>
</blockquote>
<p>Ja, wobei Cast-Operatoren keine Funktionen im eigentlichen Sinn sind.</p>
<p>KmG schrieb:</p>
<blockquote>
<p>Mit typeid hat mir in dem Zusammenhang wenig geholfen, die Id war immer Auto egal obs nen BMW oder nen VW war.</p>
</blockquote>
<p>Du sollst die <code>Auto</code> -Klasse auch polymorph machen und den dynamischen Typen abfragen.</p>
<p>Mit <code>dynamic_cast</code> :</p>
<pre><code class="language-cpp">Auto* a = new BMW();

if (BMW* b = dynamic_cast&lt;BMW*&gt;(a))
{
   // arbeite mit BMW b
}

delete a;
</code></pre>
<p>Aber besonders elegant sind Typunterscheidungen nicht. Benutze sie nur, wenn du wirklich nichts mit virtuellen Funktionen erreichen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827272</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Dec 2009 12:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 13:00:45 GMT]]></title><description><![CDATA[<p>virutelle Funktionen sind doch Funktionen, die durch das Kindelement überschrieben werden und ich dann später dennoch aufrufen kann, deswegen versteh ich nicht ganz, was die dann herausbekommen soll, welches Element es ist. Dann müsste ich ein Atribut in Auto einführen, dass mir sagt, was für ein Auto es ist oder?</p>
<p>Ich kann mir gerade nicht ganz vorstellen, wie die virutelle Methode aussehen soll.</p>
<p>Vielen Dank für die Hilfe bis jetzt schon.</p>
<p>LG<br />
KmG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827279</guid><dc:creator><![CDATA[KmG]]></dc:creator><pubDate>Thu, 24 Dec 2009 13:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Thu, 24 Dec 2009 15:37:43 GMT]]></title><description><![CDATA[<p>Du könntest ein datenelement mit dem namen speichern und dann abfragen. Sowieso hat jedes Auto eine Marke und eine Farbe, ansich gehören diese Atribute in die Basisklasse, dort brauchst du dann nur noch get-funktionen die es abfragen, und zum Beispiel einen String zurückliefern.</p>
<p>Pseudo-Code!</p>
<pre><code class="language-cpp">class Auto
{
private:
    std::string marke;
    std::string farbe;
public:
    Auto(std::string Marke, std::string Farbe)
     :marke(Marke),farbe(Farbe) {}

    std::string getFarbe() {return this-&gt;farbe;}
    std::string getMArke() {return this-&gt;marke;}

    //Sonstige Funktionen
};

class BMW :public Auto
{
public:
    BMW(std::string farbe)
    :Auto(&quot;BMW&quot;,farbe) {}

    // sonstiges
};
</code></pre>
<p>Nun kannst du einfach beim sortieren die Funktionen aufrufen und vergleichen:</p>
<pre><code class="language-cpp">auto1.getFarbe(); auto2.getMarke();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1827370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827370</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Thu, 24 Dec 2009 15:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Fri, 25 Dec 2009 04:15:43 GMT]]></title><description><![CDATA[<p>Da es denke ich noch nicht erwähnt wurde: du kannst in einen std::vector&lt;Auto&gt; keinen BMW reinstecken.<br />
Du kannst es versuchen, aber der BMW wird zu einem einfachen Auto verkrüppelt wenn du es versuchst. D.h. im std::vector&lt;Auto&gt; ist es kein BMW mehr. Das nennt man im Übrigen &quot;slicing&quot;.<br />
Die Klasse ist daher immer Auto, wenn es aus dem std::vector&lt;Auto&gt; kommt.</p>
<p>Was natürlich geht, ist einen std::vector&lt;Auto*&gt; zu machen, und da drinnen Zeiger auf Autos zu speichern. Die bleiben dann auch was sie sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827561</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 25 Dec 2009 04:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Fri, 25 Dec 2009 13:07:24 GMT]]></title><description><![CDATA[<p>KmG schrieb:</p>
<blockquote>
<p>virutelle Funktionen sind doch Funktionen, die durch das Kindelement überschrieben werden und ich dann später dennoch aufrufen kann, deswegen versteh ich nicht ganz, was die dann herausbekommen soll, welches Element es ist. Dann müsste ich ein Atribut in Auto einführen, dass mir sagt, was für ein Auto es ist oder?</p>
<p>Ich kann mir gerade nicht ganz vorstellen, wie die virutelle Methode aussehen soll.</p>
</blockquote>
<p>Nein. Ein solches Attribut solltest du nicht einführen. Bei einem sauberen Design sollte es egal sein, um was für ein Auto es sich handelt. Das Design sollte so sein, dass die Basisklasse die Funktionen bereit stellt, die du brauchst. Nicht mehr und nicht weniger.</p>
<p>Beispiel:<br />
Mache sowas nicht:</p>
<pre><code class="language-cpp">if (dynamic_cast&lt;BMW*&gt;(automobil)) {
   cout&lt;&lt;&quot;Es ist ein BMW&quot;&lt;&lt;endl;
}
if (dynamic_cast&lt;VW*&gt;(automobil)) {
   cout&lt;&lt;&quot;Es ist ein VW&quot;&lt;&lt;endl;
}
</code></pre>
<p>Statt dessen machst du sowas:</p>
<pre><code class="language-cpp">class Auto {
   public:
      virtual void typ_ausgeben() = 0;
};

class BMW {
   public:
      void typ_ausgeben() {
         cout&lt;&lt;&quot;Es ist ein BMW&quot;&lt;&lt;endl;
      }
};

class VW {
   public:
      void typ_ausgeben() {
         cout&lt;&lt;&quot;Es ist ein VW&quot;&lt;&lt;endl;
      }
};

// Aufruf
automobil-&gt;typ_ausgeben();
</code></pre>
<p>Ich hoffe, das macht das ganze klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827665</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 25 Dec 2009 13:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse eines Objekts herausfinden on Fri, 25 Dec 2009 14:32:58 GMT]]></title><description><![CDATA[<p>Ja, aber wenn es nachher auf sowas hinausläuft...</p>
<pre><code class="language-cpp">class Auto
{
    public:
        virtual std::string GetType() const = 0;
};

class BMW : public Auto
{
    public:
        virtual std::string GetType() const
        {
            return &quot;BMW&quot;;
        }
};

class Peugeot : public Auto
{
    public:
        virtual std::string GetType() const
        {
            return &quot;Peugeot&quot;;
        }
};

int main()
{
    Auto* a = new Peugeot;
    std::string type = a-&gt;GetType();

    if (type == &quot;BMW&quot;)
    {
        // ...
    }
    else if (type == &quot;Peugeot&quot;)
    {
        // ...
    }
    delete a;
}
</code></pre>
<p>...kann man gerade so gut <code>dynamic_cast</code> einsetzen, weil man so keine virtuellen Methode definieren muss, weil es keine Konventionen (welches Format hat der String) zu beachten gibt und weil die Typunterscheidung, die durch virtuelle Funktionen gerade zu verhindern wäre, in beiden Fällen unvermeidlich bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827713</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 14:32:58 GMT</pubDate></item></channel></rss>