前面已经介绍过类中6个默认函数的其中三个:构造函数、析构函数、拷贝构造函数;今天来看一下第四个默认的函数:赋值运算符的重载函数。
赋值运算符的重载函数
1、赋值运算符的重载函数的作用:
把一个已存在的对象赋值给相同类型的已存在对象
2、赋值运算符的重载函数的形式(以上篇文章中的商品CGoods类为例):
CGoods& operator=(const CGoods& rhs)
{
if (this != &rhs)
{
delete[] mname;
mname = new char[strlen(rhs.mname) + 1]();
strcpy(mname, rhs.mname);
mprice = rhs.mprice;
mamount = rhs.mamount;
}
return *this;
}
3、实现:
由上述赋值运算符的重载函数的例子可以总结出该函数的实现:
(1)判断是否为自赋值
(2)释放旧资源
(3)申请新资源
(4)赋值
4、与拷贝构造函数相似,默认的赋值运算符的重载函数也是浅拷贝的。
为什么赋值运算符的重载函数要像上述代码中那样写呢?我们先来看以下几个概念:
1、临时量:
(1)内置类型生成的临时量为常量
(2)自定义类型生成的临时量为变量
(3)隐式生成的临时量为常量
2、临时对象的生存周期:
表达式结束
3、CGoods& operator=(const CGoods& rhs)中const修饰形参的原因:
(1)防止修改实参
(2)接收隐式生成的临时对象
4、临时对象的优化:
(1)如果临时对象的目的是为了生成新对象,则以生成临时对