*this 是原对象的引用或者副本
类名& 接收的是return *this
this 是原对象的指针
class myinteger { int myint; }; myinteger& operator++() { myint +=1; return *this //返回的是原对象引用 }
class myinteger { int myint; }; myinteger operator++() { myint +=1; return *this //返回的是原对象的副本 }
上述两个代码都是可以运行的,但是如果对第二个的值进行递增,修改的是myint的副本,而不是myint,所以输出myint应该是不会改变的
例如:
//递增运算符重载 class myinteger { friend ostream& operator<<(ostream& cout, myinteger myinteger); private: int myint; public: myinteger() { myint = 0; } //operator是重置前置递增运算符 myinteger operator++() { myint += 1; return *this; //不要写成return myint,myint是int类型,是myinteger对象的属性,并不是对象 //this是该对象的地址,*this是这个对象本身 也就是myinteger类型数据 } }; ostream& operator<<(ostream& cout, myinteger myinteger) { cout << myinteger.myint << endl; return cout; } void test01() { myinteger myint; cout << ++(++myint) << endl; //2 cout << myint << endl; //1 } int main() { test01(); }
myinteger 接收的是对象本身 应该写*this
myinteger* 接收的是对象的指针,所以应该写this
myinteger& 接收的是对象的引用 应该写*this
1、return *this如何判断什么时候返回的是引用和副本
看函数的类型,如果是有&则是返回引用,如果没有,则返回副本
2、*this是对this的解引用可以是副本也可以是引用