复制所有成员
这个比较简单,好理解。
不要以拷贝函数实现另外一个拷贝函数
看了好多博客都在抄书,我不明白如果是抄书的话,写博客的意义是啥?至少应该自己吃透了用自己的话讲出来吧,真是服了。
class Father
{
public:
string name;
int age;
};
class Son: public Father
{
public:
float salary;
Son(const Son& other);
Son& operator= (const Son& other);
};
Son::Son(const Son& other)
{
Father::operator=(other);
salary = other.salary;
}
首先看一个demo,copy构造函数去调用赋值函数,编译器并不会报错。不过有个问题,我们知道拷贝构造函数是构造函数,也就是说利用一个已经存在对象对构建一个暂无存在的对象,结果利用赋值函数就很奇怪,因为赋值函数是把一个存在的对象赋值给另外一个存在的对象。
正确的应该是:
Son::Son(const Son& other):Father(other), salary(other.salary)
{
}
而赋值函数不是构造函数,所以赋值函数应该用下面的方式:
Son& Son::operator=(const Son& other)
{
if(this == &other) return this;
Father::operator=(other);
salary = other.salary;
return *this;
}