Frage zu Gotw#004



  • ich versteh nicht, warum Sutter auf http://www.gotw.ca/gotw/004.htm schreibt:

    3. Style: operator+ should not be a member function. If it's a member like this, you can write "a=b+1" but not "a=1+b".

    wieso sollte man a=1+b schreiben koennen, wenn man operator+ nicht als member schreibt? geht er implizit davon aus, dass man einen int implizit in eine Instanz der Klasse von b gecastet werden kann?



  • Wenn du op+ als member überlädst, dann ist der 1. Parameter immer implizit this und der 2. kann anhand von Konstruktoren entsprechen gecastet werden. Wenn op nicht als member überladen wird, dann können beide Parameter gegebenfalls gecastet werden.
    Dazu ein kleines Beispiel:

    #include <iostream>
    using namespace std;
    
    class Integer { 
    public: 
        Integer():value(0) { }
        Integer(int x):value(x) {} 
        int getValue() const { return value; }
    
        const Integer operator+(const Integer& rhs) {
           return Integer(value + rhs.value);  
        }
    private:
        int value; 
    }; 
    
    int main() { 
        Integer i1 = 2;
    
        Integer result;
        result = i1 + 4;  // klappt, weil: i1.operator+(4)  , 4 kann per Ctor in Integer konvertiert werden
        result = 4 + i1;  // klappt nicht. 4.operator+ kann nicht gehen. operator+(4, i1) würde gehen!
    
        return 0;
    }
    

    Edit: Beispiel hinzugefügt


Anmelden zum Antworten