关于重载运算符

时间:2019-06-25 02:07:27

标签: c++

我的问题是,为什么this-> var将自动选择12,而obj.var仅选择55?为什么this-> var不是55?是因为它所处的位置吗?(我的意思是this-> var + obj.var,其中this->放在“ +”符号的前面),如果我更改代码,例如:res.var = obj .var-this-> 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;
}

1 个答案:

答案 0 :(得分:0)

在c ++上,所有运算符都有关联规则。 加法,乘法,移位,逻辑等运算符在左右关联。 一元赋值运算符从右到左是关联的。 因此,每当您使用左关联运算符时,编译器都会像代码一样从左至右读取它。