运算符重载是本质是具有特殊函数名的函数,也具有返回值类型,函数名字以及参数列表,返回值名字和参数列表与普通函数类似。
函数原型:返回值类型 operator操作符 (参数列表)
(参数个数要和操作符的操作数保持一致)
注意:
1.不能连接其他符号创建新的操作符,只能重载存在的操作符。
2.重载操作符必须有一个类类型参数(自定义类型)。
3.用于内置类型的运算符,其含义不能改变。
4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐
藏的this。
5. .* :: sizeof ?: . 以上5中运算符不能重载。
//使用全局变量的 operator==
bool operator==(const Date& d1, const Date& d2)
{
return d1._year == d2._year
&& d1._month == d2._month
&& d1._day == d2._day;
}
//一般运算符重载要放到类中,全局的运算符重载,访问类变量时,
就要设置为公有,破坏了封装性,我们一般直接重载成员函数
(我们要注意成员函数的第一个参数 this)
还有较为特殊的前置++,后置++,前置--,后置--,运算符重载时,需要往后置--或后置++中传一个int类型的值。
// 后置--
Date operator--(int)
{
Date tmp(*this);
*this -= 1;
return tmp;
}
// 前置--
Date& operator--()
{
*this -= 1;
return *this;
}