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) {}
...
};