运算符重载和复制构造函数的备忘录

#include <iostream> 
using namespace std;
class A {
public:
    int  x{ 0 };
    A(int i)
    {
        x = i;
    }
    A   operator =(int z)//注意这里返回值不是引用
    {
        x = z;
        return *this;
    }
    A(A & a)
    {
        cout << x<<":修改前"<<endl;
        x = a.x * 2;
        a.x += 5;
        cout << x << ":修改后" << endl;
    }
};
 
int main(int argc, char *argv[]) {

    A a = 1;
    auto xx= (a = 10.1) ;
//这里应该做个备忘录,
//xx此时是20. 
//a = 10.1;这句,是运行了 a的=的重载函数.=重载函数的返回值,返回给了前面的东西xx,而不是a他自己.
//因为=重载运算返回的不是引用,所以返回值需要被复制,所以A(A & a)被调用.然后产生的新的临时对象,返回给了xx

    cout << a.x;
    return 0;
}

 

posted @ 2019-04-28 09:41  interim  阅读(138)  评论(0编辑  收藏  举报