Мой вопрос в том, почему this->var автоматически выберет 12, а obj.var просто выберет 55? Почему this->var не 55? Это потому, что позиция, в которой он размещен? (Я имею в виду this->var+obj.var, где this-> помещается перед знаком «+»), и если я изменю код следующим образом: res.var= obj .var-это->вар; , кажется, что this->var все еще 12. Таким образом, похоже, что код obj1 + obj2, если obj2 находится «после» знака «+», это тот, который выбрасывается в &obj, это правильный вывод ? Спасибо!
#include <iostream>
using namespace std;
class MyClass {
public:
int var;
MyClass() { }
MyClass(int a)
: var(a) { }
MyClass operator+(MyClass &obj) {//here's my problem
MyClass res;
res.var= this->var+obj.var;//here's my problem
return res;
}
};
int main() {
MyClass obj1(12), obj2(55);
MyClass res = obj1+obj2;//here's mt problem
cout << res.var;
}
Это 2 отдельных объекта. this в этом контексте относится к obj1, который содержит значение 12, а var относится к obj2, который содержит значение 55.
Кроме того, если это вас сбивает с толку, я настоятельно рекомендую получить книга С++, чтобы помочь вам.
obj1 + obj2 то же, что obj1.operator+(obj2).





В С++ все операторы имеют правила ассоциативности. Аддиктивные, мультипликативные, сдвиговые, логические и т. д. операторы являются лево-правоассоциативными. Унарные операторы присваивания ассоциативны справа налево. Поэтому всякий раз, когда вы используете левые ассоциативные операторы, компилятор читает их слева направо, как и ваш код.
Ассоциативность имеет значение только тогда, когда задействовано более одного оператора (например, в 3 - 2 - 1), и здесь она совершенно неуместна. *this оператора-члена — это всегда левый операнд.
Добро пожаловать в Stack Overflow. Причина в том, что операторы работают слева направо. Итак, obj1 (который в операторе + равен
this) является левым, поэтому у него будет 12. Думайте об этом как о вызове функции:obj1.Add(obj2). В этом случае вы передаетеobj2(что равно 55). Здесь происходит то же самое.