2016-05-23 4 views
3

Wenn wir zwei Strings ohne strcmp() Funktion vergleichen wollen, können wir dann == Operator überladen, um zwei Strings zu vergleichen?Können wir den Operator'== `in C++ überladen, um zwei Strings zu vergleichen?

+0

'operator ==' ist bereits überlastet für 'std :: string';). So könnten Sie etwas wie 'std :: string (str1) == std :: string (str2)' machen. – 101010

+0

Sie können Ihren eigenen Namespaces weitere Überladungen hinzufügen. –

Antwort

9

Ich nehme an, Sie wollten operator== mit c-style String überlasten, dann ist die Antwort No. Die operator overloading soll zum Anpassen von Operatoren für Operanden benutzerdefinierte Typen verwendet werden.

Vom Standard $ 13.5/6 Überladene Operatoren [over.oper] (Hervorhebung von mir)

Eine Operatorfunktion muss entweder eine nicht-statische Member-Funktion oder eine Nicht-Mitglied Funktion sein, die hat mindestens ein Parameter vom Typ eine Klasse, ein Verweis auf eine Klasse, eine Aufzählung oder eine Referenz auf eine Aufzählung.

Hinweis, wenn Sie std::string gemeint, ist die Antwort immer noch No. STL hat die Implementierung von operator== für std::string bereitgestellt und Sie können es nicht ändern. In der Tat, Sie müssen es überhaupt nicht überladen, nur die Verwendung wird in Ordnung sein.

EDIT

Wenn Sie es für Ihre eigene Klasse zu überlasten wollen, ist es in Ordnung. Wie

Class X { 
    //... 
}; 
bool operator==(const X& lhs, const X& rhs) { 
    // do the comparison and return the result 
} 

dann

X x1, x2; 
//... 
if (x1 == x2) { 
    //... 
} 
+0

Ich meine, wenn ich eine Klasse mit einem Char-Array als Datenelement mache und ich mache zwei Objekte dieser Klasse. Dann kann ich diese Objekte durch Überladen '==' ?? – a874

+0

@ a874 Natürlich können Sie. Implementiere es einfach. – songyuanyao

+2

@ a874 Ja, Sie können, aber Sie brauchen nicht, denn es gibt 'std :: string'. – user2807083

2

es nicht bereits überlastet?

#include<iostream> 
#include<cstring> 
int main() 
{ 
    std::string a = "Ala"; 
    std::string b = "Ala"; 
    if(a==b) 
     std::cout<<"same\n"; 
    else 
     std::cout<<"but different\n"; 
} 

Der obige Code für mich gearbeitet (Codeblocks)

Verwandte Themen