条款12:复制对象时勿忘其每一个成分

文章讨论了C++中拷贝构造函数和赋值操作符的正确使用。作者指出,不应在拷贝构造函数中调用赋值函数,并提供了正确的实现示例。拷贝构造函数用于创建新对象作为已有对象的副本,而赋值函数则是将一个对象的值赋给另一个已存在的对象。文章强调了理解和正确实现这两个函数的重要性。
摘要由CSDN通过智能技术生成

复制所有成员

这个比较简单,好理解。

不要以拷贝函数实现另外一个拷贝函数

看了好多博客都在抄书,我不明白如果是抄书的话,写博客的意义是啥?至少应该自己吃透了用自己的话讲出来吧,真是服了。

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值