【翁恺】29-运算符重载-赋值

copying vs. initialization  

MyType b;
MyType a = b;//拷贝构造:做了一个新的对象出来
a = b;//赋值

------------------------
class Fi{
public:
    Fi(){}
};
class Fee{
public:
    Fee(int){}
    Fee(const Fi&){}
};

int main(){
    Fee fee = 1;//Fee(int)
    
    Fi fi;
    Fee fum = fi;//Fee(Fi)  
    
    fum	 = fi;//????  
}

automatic operator= creation

  • the compiler will automatically create a type::oprator=(type) if you don't make one

  • memberwise assignment

    class Cargo{
    public:
        Cargo& operator=(const Cargo&){
            cout<<"inside Cargo::operator=()"<<endl;
            return *this;
        }    
    };
    class Truck{
        Cargo b;
    };
    int main(){
        Truck a, b;
        a = b;//prints:"inside Cargo::operator=()"
    }

assignment operator

  • must be a member function

  • will be generated for you if you don't provide one

    • same behavior as automatic copy ctor -- memberwise assignment
  • check for assignment to self

  • be sure to assign to all data members

  • return a reference to "*this"

    A = B = c;//executed as A = (B = c);

skeleton assignment operator

T& T::operator=(const T& rhs){
    //check for self assignment
    if(this != &rhs){//如果是自己赋值给自己,可能在自己被赋值之前被释放,比如new到的东西
        //perform assignment
    }
    return *this;
}//this checks address vs. check value (*this != rhs)

assignment operator

  • for classes with dynamically allocated memory declare an assignment operator(and a copy constructor)
  • to prevent assignment, explicitly declare operator= as private
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理心炼丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值