运算符重载
特征:
1.函数名:operator+合法的运算符(eg:重载<,函数名:operator<)
2.运算符重载以后不改变运算符的优先级,结合性,操作数的个数
注:五个不能重载的运算符:
1. ?: 2. :: 3.sizeof 4. .* 5. .
一、赋值运算符重载
1.定义:赋值运算符的重载是对一个已存在的对象,进行(拷贝)赋值
而拷贝构造函数,是创建一个新的对象,并用一个已有的对象初始化这个新创建的对象
思考:为什么拷贝构造函数的返回值要用Date&,用viod的可以吗
答:从图中可以看出,void做返回值也不会出错,但为什么要用Date&呢?因为我们的= 支持连续赋值,如果我们想连续赋值(d3=d2=d1)时void做返回值就会出错,而Date&做返回值就可以。
2. 重载函数调用时编译器做的一些处理
赋值运算符中时怎么区分前置++,后置++的?
前置++/--:
Date& operator++()
Date& operator--()
后置++/--:
Date operator++(int)
Date operator--(int)
后置++/--中其实并不需要参数(int),但是为了和前置的构成重载,我们在定义时加上了这个形参
后置++不用返回引用
取地址运算符重载(这俩个函数一般不需要重新定义):
class Date
{
public:
Date* operator&()
{
return this;
}
const Date* operator&() const
{
return this;
}
private:
int _year;
int _month;
int _day;
};