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;
    }
    

Anmelden zum Antworten