Operator von Methoden überladen
-
Ich bin mal wieder da und hab auch wieder eine Frage^^
Also, ist es möglich Operatoren von Methoden zu überladen?
Also dass ich z.b.
Class foo; foo.x() + 1;schreiben kann?
Geht das direkt, oder müsste ich irgendwelche Zwischenobjekte erstellen?
Gruß,
The-Kenny
-
Anfaengerantwort (ergo nicht unbedingt richtig):
Methoden/Funktionen haben keine Operatoren...
Eine Methode gibt einen Wert zurueck (oder void) Und auf diesen Rueckgabewert (was auch immer sein mag, vielleicht int in diesem fall) wird der operator+ aufgerufen.
Falls die Funktion void oder einen Typ, fuer den kein operator+ definiert wurde, zurueckgibt, sollte das nicht kompilierbar sein.
Anders: beim aufruf vom Operator+ ist deine Methode schon laengst abgearbeitet und wieder verlassen worden.
Ergo: Nein, geht nicht, macht auch keinen Sinn. (oder wo wuerdest du das nutzen wollen?)
-
Wenn die Methode x() ein Objekt (by Value) einer Klasse bzw. Struktur (oder auch eine (const-) Referenz) zurückgibt, dann könntest du dafür Operatoren überladen.
Also folgendes ist machbar:
class T { public: X operator +(int); }; // mögliche Rückgabewerte von foo.x(): // T x(); // T& x(); // const T& x();Der Rückgabewert X des Operators mußt du dann entsprechend definieren, also z.B. T oder auch int oder sonstwie...
-
Was willst du damit bezwecken. Schreiben kannst du dass auf jeden Fall.
class Bar { public: int operator()() { return 1; } }; struct Foo { Bar x; }; int main () { Foo foo; int i = foo.x() + 1; }