Für das idiomatische Äquivalent Ihres Beispiels würden Sie operator==
wie folgt definieren:
In C ++ schreiben Sie normalerweise keine Funktion, um ViewMode
Objekte mit etwas zu vergleichen, das überhaupt nichts mit ViewMode
zu tun hat. Ich nehme an, wenn Sie wirklich wollten, dass dieser Vergleich false zurückgibt, anstatt sich zu kompilieren, dann könnten Sie ein paar Template-Operatoren hinzufügen (als freie Funktionen außerhalb der Klasse):
aber ich kann es wirklich nicht empfehlen. Dieses Java-Idiom gilt nicht für C ++, denn in C ++ sollte man eigentlich nie ein Objekt haben, aber keine Ahnung von seinem Typ haben.
Wenn Sie möchten, dass Ihre equals-Funktion virtuell ist, ist es wahrscheinlich am besten, eine equals()
virtuelle Funktion zu schreiben, anstatt operator==
dafür zu verwenden. Sie würden es schreiben, um einen const ViewObject &
als Parameter zu nehmen, also brauchen Sie kein Äquivalent zum instanceof
check. Das ist auch gut, weil C ++ keine Möglichkeit hat, ein Objekt von völlig unbekanntem Typ aufzunehmen und zu testen, ob es sich um eine Instanz eines bestimmten Typs handelt.
Sie benötigen selten eine polymorphe equals-Funktion in C ++, aber wenn Sie sie beispielsweise in std::unordered_map
verwenden würden, würden Sie die zusätzlichen Template-Parameter für unordered_map
angeben. Geben Sie ihm eine Gleichheitsvergleichsfunktion, die zwei Zeiger und Aufrufe von equals
für die eine oder andere benötigt, und eine Hash-Funktion, die etwas Sinnvolles tut.
Nein. C ++ hat kein globales Typmodell wie Java. Es gibt keinen Object
-Typ, von dem alle anderen Typen erben, daher gibt es keine Methoden (wie equals
), die für alle Klassen definiert sind.
C ++ bietet ein Framework zum Erstellen eines Typmodells mit einer universellen Vergleichsoperation: operator ==
. Es liegt an Ihnen, alle Implementierungen in allen Klassen so zu erstellen, dass sie korrekt interagieren. Es gibt jedoch keine Standardimplementierung, die mit Object.equals
vergleichbar ist.
Möglicherweise können Sie dafür den typeid
-Operator verwenden.
Tags und Links c++ variables comparison