Operator Overloading
-
Einen wunderschönen Gutenmorgen,
ich habe ein
std::set<Foo,Foo> m_Dat;, welcher mir objekt der klasse Foo enthält.
Dann hab ich mir den operator
bool operator()(const Foo &a, const Foo&b){..};abgeschaut, welcher ja als funktor für die Sortierfunktion des std::set dient.
aber welchen Operator überschreib diesrr operator()? Wie wird dieser operator alternativ für andere dinge eingestzt?
-
der operator() ist eine Memberfunktion einer weiteren Klasse, die man auch Komparatorklasse nennt. Objekte von Klassen, die den op() überladen haben, kann man im Grunde wie Funktionen aufrufen. Ein Beispiel verdeutlicht das vielleicht:
class Bar { public: bool operator() (Foo const& f1, Foo const& f2); }; int main() { Foo a; Foo b; Bar bar; bar(a,b); //sieht aus wie ein Funktionsaufruf, ist aber aufruf des op() vom bar-Objekt }
-
#include <iostream> #include <string> using namespace std; class GrussFunktor { public: GrussFunktor(const string &gruss) : m_gruss(gruss) { } void operator()(const std::string person) { cout << m_gruss << ", " << person << "!" << endl; } private: string m_gruss; }; int main() { GrussFunktor gruesse("Einen wunderschoenen guten Morgen"); gruesse("Operator Frager"); gruesse("C++ Forum"); }
-
class Bar { public: bool operator() (Foo const& f1, Foo const& f2); }; int main() { Foo a; Foo b; Bar bar; bar(a,b); //sieht aus wie ein Funktionsaufruf, ist aber aufruf des op() vom bar-Objekt }Müsste hier als resukltat kein bool stehen?
bool x= bar(a,b);
-
Kommt drauf an ob Du das Ergebnis (den bool Rückgabewert) weiter verarbeiten willst. An sonsten wir das was vom op() zurückkommt "verworfen".
-
Nein, das Ergebnis muss nicht zwingend einer Variable/einem Objekt zugewiesen werden. Das Ergebnis des Funktions-/Methodenaufrufs kann man beliebig unter den Tisch fallen lassen, wenn man es nicht benötigt.
Grüße... Heiko