Instanzen von einer Klasse vergleichen

  • Hallo,
    ich bin noch ein C++ Anfänger. Ich würde gerne zwei Instanzen einer Klassen auf Gleichheit überprüfen, der Compiller spuckt aber immer folgenden Fehler aus:
    error C2678: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'cZahl' akzeptiert (oder keine geeignete Konvertierung möglich)

    Hier folgt der Code:


    Hoffentlich könnt ihr mir helfen, denn ohne das Vergleichen von Instanzen werd ich nicht weit kommen :(

  • ja, du musst eine methode schreiben, die die structs auf gleichheit überprüft (vergleich der einzelnen werte). die nennst du dann am besten isEqual o.ä. theoretisch könntest du auch noch den == operator überladen, aber das würde ich dir, wenn du ein anfänger bist, eher nicht raten :)

  • theoretisch könntest du auch noch den == operator überladen, aber das würde ich dir, wenn du ein anfänger bist, eher nicht raten :)

    Aber warum denn? Ist doch ganz einfach (das bring sogar ich als C++-Newbie zusammen :)):

    So ungefähr sollts jedenfalls gehen ;)

  • "ungefähr".... der parametertyp in der methode ist auf einmal File anstelle von cZahl ;)

    na dann lass mich mal was versuchen:

    ach, c++ ist schon huebsch, nur geht mir ein garbage collector ab...

    ps: identitaet (identisch) heisst, dass zwei objekte sich quasi auf dem selben speicherplatz befinden (es existiert eigentlich nur ein objekt, aber man kann auf dieses mit zwei variablen zugreifen). gleichheit besteht dann, wenn alle attribute beider objekte uebereinstimmen (was in dem bsp geprueft wird).
    somit sind identische objekte immer automatisch auch gleich -boah, zuviel "objektorientierte programmierung" intus :D

  • ...

    PHP
    bool cZahl::Equal(const cZahl & other) const {
        return ((Wert1 == other.Wert1) && (Wert2 == other.Wert2));
    }

    es gibt vl. noch eine elegantere methode um die equal - funktion zu implementieren, und zwar ohne, dass der code davon abhängig ist welche membervariablen in den einzelnen klassen tatsächlich stecken:

    bool cZahl::Equal(const cZahl & other) const {
    return !memcmp (this, &other, sizeof (cZahl)) ;
    }

    damit kann man auch sehr leicht klassen vergleichen die mehr als nur die 2 ints beinhalten, ohne, dass man dabei jedes mal die equal funktion verändern & erweitern müsste.

    ein nachteil dieser variante ist natürlich, dass sie i.A. nicht mehr funktioniert, wenn die klasse pointer (beispielsweise strings, ...) als membervariablen enhält!

    lg, ES

    ¡Otras hijas tienen lindas madres también!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!