effective C++笔记之条款16: 在operator=中对所有数据成员赋值


1.       写赋值运算符时,必须对对象的每一个数据成员赋值。每增加一个数据成员,同时要更新构造函数和赋值运算符。

2.       对于指针成员,赋的值是指针所指的值,而不是指针本身。

3.       涉及继承时,应注意Base成员的赋值操作。如下情况:

class Base

{

public:

        Base(int temp = 0):x(temp) {}

private:

        int x;

};

class Derived: public Base

{

public:

        Derived(int value): Base(value), y(value) {}

        Derived& operator=(const Derived& rhs)

        {

            if (this == &rhs)

                return*this;

            Base::operator=(rhs); // 调用this->base::operator=

            y = rhs.y;

            return *this;

        }

private:

        int y;

};

4.       另一个经常发生的和继承有关的类似问题是在实现派生类的拷贝构造函数时。避免对基类对象的数据成员没有拷贝。如果没有调用Base的拷贝构造函数,则会默认的调用Base的缺省构造函数。则基类对象的数据成员将会没有被拷贝。看看下面这个正确的构造函数。

class Derived: public Base

{

public:

 Derived(const Derived& rhs): Base(rhs), y(rhs.y) {}

    ...

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值