Effective C++ 条款10 令operator=返回一个reference to *this 条款11 在operator=中处理"自我赋值"

1. 为了支持形如“a=b=c”的连锁形式,最好令operator=返回一个reference to *this.

2. 如果类中含有用于指向堆内存的指针,那么赋值操作符就要注意自我赋值的问题,

//
//  main.cpp
//  条款10:令operator=返回一个reference to *this
//
//  Created by 于磊 on 2018/6/24.
//  Copyright © 2018 于磊. All rights reserved.
//

#include <iostream>
#include <string>
using namespace std;
class Widget {
  public:
    Widget(const std::string &str, int money) : componet(str), money(money) {
    }
    Widget &operator=(const Widget &rhs) {
        componet = rhs.componet;
        return *this;
    }
    Widget &operator+=(const Widget &rhs) {
        money += rhs.money;
        return *this;
    }
    std::string componet = "letf";
    int money            = 0;
};

int main(int argc, const char *argv[]) {
    Widget widget_you("you", 10);
    Widget widget_me("me", 2);
    cout << widget_you.componet << " and " << widget_me.componet << " with " << widget_me.money << " " << widget_you.money << endl;
    widget_me = widget_you;
    widget_me += widget_you;
    cout << widget_you.componet << " and " << widget_me.componet << " with " << widget_me.money << " " << widget_you.money << endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值