关于C++ return * this

转自 : https://blog.csdn.net/u011846436/article/details/45222905

不废话,直接上例子,使用赋值构造函数解释为什么需要 return *this

 

#include<iostream>
using namespace std;
 
class Test{
    
public:
    //构造函数
    Test(int i=0, double j=0.0) : m_i(i), m_j(j){
    
    }
 
    //赋值构造函数
    Test& operator=(Test &rhs){
        this->m_i = rhs.m_i;
        this->m_j = rhs.m_j;
        return * this;
    }
    
    int m_i;
    double m_j;
 
};
 
 
int main(){
    
    //1、赋初值,输出 1  2.3
    Test obj1(1,2.3);
    cout<< obj1.m_i << endl << obj1.m_j <<endl;
    cout << endl << "-------------------" << endl;
 
    //2、未赋初值,输出0 0
    Test obj2;
    cout<< obj2.m_i << endl << obj2.m_j <<endl;
    cout << endl << "-------------------" << endl;
 
    //3、未赋初值,但是通过赋值构造函数进行了赋初值,但是注意是重复调用赋值构造函数赋初值。
    Test obj3;
    obj3 = obj2 = obj1;//这里,先进性obj2 = obj1 的操作, (赋值成功后通过return *this,返回obj2对象), 然后进行 obj3 = obj2 的操作。
    cout<< obj2.m_i << endl << obj2.m_j <<endl;
    cout << endl << "-------------------" << endl;
    
    /****
        通过示例3,你会发现,如果没有return * this,你不能够返回obj2对象,
        那么在进行 obj3=obj2 操作的时候,赋值构造函数就不能用了。
        C++ 为了方便我们使用类似于    int i=j=k=5这种赋值方式,
        就必须在从右向左赋值过程中,每次执行完一个赋值操作,返回该对象,然后继续向左执行。
    *****/
 
    return 0;
}

另外还有一个很不错的解释 : https://blog.csdn.net/stpeace/article/details/22220777

 

转载于:https://www.cnblogs.com/mrh-acmer/p/9557831.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值