Frage wegen überladen von Operatoren



  • Also ich habe da mal eine Frage vielleicht kann mir ja jmd eine Antwort geben.

    Ich überlade einen Operator +

    das in der Klasse:
    private:
    int longitude,latitude;

    public:
    loc operator+(loc op2);

    Dann
    loc loc::operator+(loc op2)
    {
    loc temp;

    temp.longitude = op2.longitude + longitude;
    temp.latitude = op2.latitude + latitude;

    return temp;
    }

    So und jetzt zu dem was ich nicht verstehe der Aufruf der MAIN
    loc ob1(10,10),ob(5,30);

    ob1 = ob1 + ob2;

    So wie funktioniert das jetzt? Ich addiere 2 Objekte aber oben in meiner Operator funktion habe ich aber nur einmal stehen (loc op2) als übergabe parameter wie weiß jetzt der PC welches Objekt welches ist besser gesagt welches
    er in op2 einfügen soll ?



  • Kann dir wahrscheinlich nicht viel halfen ausse das es bei mir fonktioniert.
    ich habe VC++ .NET 2003

    class loc{
    private:
    int longitude,latitude;
    
    public:
    	loc(int a,int b){this->longitude = a; this->latitude = b;}
    	loc(){this->longitude = 0; this->latitude = 0;}
    loc operator+(loc op2);
    };
    
    loc loc::operator+(loc op2)
    {
    loc temp;
    
    temp.longitude = op2.longitude + longitude;
    temp.latitude = op2.latitude + latitude;
    
    return temp;
    }
    
    int main(){
    loc ob1(10,10),ob2(5,30);
    
    ob1 = ob1 + ob2; 
    
    }
    

    mfg



  • Das liegt daran, dass bei binären Operatorfunktionen, die als Methode einer Klasse definiert sind, der Compiler stets davon ausgeht, dass der linke Operand ein Objekt der Klasse ist (Somit muss dieser Operand nicht extra mit angegeben werden und es bleibt bei einem Parameter).

    bzg. Operatorenüberladung siehe auch http://tutorial.schornboeck.net/operatoren_ueberladung.htm

    Caipi


Log in to reply