<?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[&amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren]]></title><description><![CDATA[<p>Ich habe Instanzen verschiedener Klassen zu vergleichen , über Pointer zu der Basisklasse ( Container mit Pointern )</p>
<p>Was haben wir</p>
<pre><code class="language-cpp">class Base
{
public:
    bool operator == (Base const &amp;) const {
        std::cout &lt;&lt; &quot;Base::operator ==\n&quot;;
        return true;
   }
};

class Derived:public Base
{
public:
    bool operator == (Derived const &amp;) const {
        std::cout &lt;&lt; &quot;Derived::operator ==\n&quot;;
        return true;}
};

Base * b1 = new Derived(),*b2 = new Derived();
*b1==*b2; // führt Base::operator== aus , weil nicht virtuell
</code></pre>
<p>Dann habe ich folgende Lösung &quot;erfunden&quot; , jetzt was ich nicht<br />
ob ich das Rad neu erfinde und es gibt schon eine Musterlösung <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>
<pre><code class="language-cpp">class Base
{
public:
    virtual bool eq(Base const &amp; b) const {
        std::cout&lt;&lt;&quot;Base\n&quot;;
        return true;
        }
};

class Derived:public Base
{
public:
    bool eq(Base const &amp; b) const {
        const Derived d=dynamic_cast&lt;const Derived&amp;&gt;(b);
        std::cout&lt;&lt;&quot;Derived\n&quot;;
        return true;
        }
};

bool operator == (Base const &amp; lhs,Base const &amp; rhs)
{
    return lhs.eq(rhs);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/235972/quot-virtuelle-quot-vergleichsoperatoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:13:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235972.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2009 11:39:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren on Mon, 09 Mar 2009 11:57:13 GMT]]></title><description><![CDATA[<p>Ich habe Instanzen verschiedener Klassen zu vergleichen , über Pointer zu der Basisklasse ( Container mit Pointern )</p>
<p>Was haben wir</p>
<pre><code class="language-cpp">class Base
{
public:
    bool operator == (Base const &amp;) const {
        std::cout &lt;&lt; &quot;Base::operator ==\n&quot;;
        return true;
   }
};

class Derived:public Base
{
public:
    bool operator == (Derived const &amp;) const {
        std::cout &lt;&lt; &quot;Derived::operator ==\n&quot;;
        return true;}
};

Base * b1 = new Derived(),*b2 = new Derived();
*b1==*b2; // führt Base::operator== aus , weil nicht virtuell
</code></pre>
<p>Dann habe ich folgende Lösung &quot;erfunden&quot; , jetzt was ich nicht<br />
ob ich das Rad neu erfinde und es gibt schon eine Musterlösung <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>
<pre><code class="language-cpp">class Base
{
public:
    virtual bool eq(Base const &amp; b) const {
        std::cout&lt;&lt;&quot;Base\n&quot;;
        return true;
        }
};

class Derived:public Base
{
public:
    bool eq(Base const &amp; b) const {
        const Derived d=dynamic_cast&lt;const Derived&amp;&gt;(b);
        std::cout&lt;&lt;&quot;Derived\n&quot;;
        return true;
        }
};

bool operator == (Base const &amp; lhs,Base const &amp; rhs)
{
    return lhs.eq(rhs);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676593</guid><dc:creator><![CDATA[kitov]]></dc:creator><pubDate>Mon, 09 Mar 2009 11:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren on Mon, 09 Mar 2009 11:52:40 GMT]]></title><description><![CDATA[<p>In deinem Beispiel führt <code>b1==2</code> gar nichts aus, weil du Pointer vergleichst. In diesem Fall bringt dir <code>virtual</code> auch recht wenig, da du das Objekt als <code>Base</code> ansprichst und der Compiler nicht sieht, dass die Funktion im eigentlichen Objekt überschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676601</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Mon, 09 Mar 2009 11:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren on Mon, 09 Mar 2009 11:56:11 GMT]]></title><description><![CDATA[<p>devkid schrieb:</p>
<blockquote>
<p>In deinem Beispiel führt <code>b1==2</code> gar nichts aus, weil du Pointer vergleichst. In diesem Fall bringt dir <code>virtual</code> auch recht wenig, da du das Objekt als <code>Base</code> ansprichst und der Compiler nicht sieht, dass die Funktion im eigentlichen Objekt überschrieben ist.</p>
</blockquote>
<p>Ja , das ist ein Syntaxfehler</p>
<pre><code class="language-cpp">*b1==*b2
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676602</guid><dc:creator><![CDATA[kitov]]></dc:creator><pubDate>Mon, 09 Mar 2009 11:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren on Mon, 09 Mar 2009 12:13:59 GMT]]></title><description><![CDATA[<p>Diese Lösung ist besser</p>
<pre><code class="language-cpp">class Base
{
public:
    bool operator == (Base const &amp; b) const { return eq(b); }
protected:
    virtual bool eq(Base const &amp; b) const { std::cout&lt;&lt;&quot;Base\n&quot;; return true; }
};

class Derived:public Base
{
protected:
    bool eq(Base const &amp; b) const {
        assert( typeid(b)==typeid(*this) );
        const Derived d=dynamic_cast&lt;const Derived&amp;&gt;(b);
        std::cout&lt;&lt;&quot;Derived\n&quot;;
        return true;
        }
};

int main(int argc,char** argv)
{
    Base* d1=new Derived();
    Base* d2=new Derived();
    *d1==*d2;
}
</code></pre>
<p>So kann man Objekte nur gleichen Typs vergleichen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676610</guid><dc:creator><![CDATA[kitov]]></dc:creator><pubDate>Mon, 09 Mar 2009 12:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;virtuelle&amp;quot;  Vergleichsoperatoren on Mon, 09 Mar 2009 12:24:28 GMT]]></title><description><![CDATA[<p>Vorsicht, es kann bei virtuellen Vergleichsoperatoren passieren, dass z.B. A==B ist, aber B==A falsch. Was ja eher unlogisch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676638</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 09 Mar 2009 12:24:28 GMT</pubDate></item></channel></rss>