文章目录
一、赋值重载函数是什么?
拷贝构造是用一个已经初始化的对象去初始化一个马上将要创建的对象
而赋值重载是两个已经存在并初始化的对象之间进行拷贝赋值
这就是基本的赋值运算符的重载,但是这个还有问题,赋值运算符重载函数的返回值应该是d1 这样就可以连续赋值了
当我们修改了operator=函数的值为date类的对象时,就可以连续赋值了,但是每次传值返回都会调用一次拷贝构造,为了提高效率,我们可以传引用返回,减少拷贝构造,因为this指针指向d1 *this出了operator=函数依然存在(因为d1存在),所以可以传引用返回
为了避免自己给自己赋值,我们还可以写成:
二、 总结
- 构造函数和析构函数的处理机制基本是一样的
拷贝构造和负值重载函数的处理机制基本是一样的 - 用户没有显式实现赋值重载时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝(也就是浅拷贝) ,对于内置类型成员变量是字节序的值拷贝,而自定义类型成员变量需要调用对应类的赋值运算符,其实这个和类的拷贝构造函数一样
- 赋值运算符只能重载成类的成员函数不能重载成全局函数,赋值运算符如果不显式实现,编译器会生成一个默认的。此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数