1. 赋值运算符重载
1. 赋值运算符重载格式
参数类型
:
const T&
,传递引用可以提高传参效率
返回值类型
:
T&
,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值
检测是否自己给自己赋值
返回
*this
:要复合连续赋值的含义
class Date
{
public :
Date(int year = 1900, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
Date (const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
Date& operator=(const Date& d)
{
if(this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
return *this;
}
private:
int _year ;
int _month ;
int _day ;
};
2. 赋值运算符只能重载成类的成员函数不能重载成全局函数
赋值运算符如果不显式实现,编译器会生成一个默认的。此时用户再在类外自己实现
一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值
运算符重载只能是类的成员函数。
3.
用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝
。
内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符
重载完成赋值
注意:如果类中未涉及到资源管理,赋值运算符是否实现都可以;一旦涉及到资源管理则必
须要实现。
2.取地址及const取地址操作符重载
const成员
将
const
修饰的
“
成员函数
”
称之为
const
成员函数
,
const
修饰类成员函数,实际修饰该成员函数
隐含的
this
指针
,表明在该成员函数中
不能对类的任何成员进行修改。
注意:
这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需
要重载,比如想让别人获取到指定的内容!