Gibt es in C ++ ein Äquivalent zur Java-Methode equals?

7

Gibt es etwas wie Java equals() ? Um zu vergleichen, ob das Objekt vom selben Typ ist?

%Vor%     
user63898 11.06.2012, 13:22
quelle

4 Antworten

13

Für das idiomatische Äquivalent Ihres Beispiels würden Sie operator== wie folgt definieren:

%Vor%

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):

%Vor%

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.

    
Steve Jessop 11.06.2012 13:43
quelle
12

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.

    
bmargulies 11.06.2012 13:24
quelle
5

Sie können operator== in Ihrer Klasse definieren.

    
Marc Plano-Lesay 11.06.2012 13:26
quelle
0

Möglicherweise können Sie dafür den typeid -Operator verwenden.

    
Some programmer dude 11.06.2012 13:26
quelle

Tags und Links