目录:点我
一、重载
类的重载特性允许将C++现有的运算符的功能改为其他形式,举个栗子:
// 两个时间相加非重载版
class Time {
private:
int hours;
int minutes;
public:
Time Sum(const Time & t) const;
};
Time Time::Sum(const Time & t) const {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
此时要实现两个Time
对象相加,需要调用成员方法Sum
,举个栗子:
Time a, b;
a.Sum(b);
而使用重载方式则更加简单,举个栗子:
// 两个时间相加重载版
class Time {
private:
int hours;
int minutes;
public:
Time operator+(const Time & t) const;
};
Time Time::operator+(const Time & t) const {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
此时可以使用下面两种方法实现两个对象的相加方法:
Time a, b;
a.operator+(b); // first
a + b; // second
注意:
- 重载运算符不能改变需要的操作数个数,例如加法运算需要两个操作数,不能仅使用一个操作数完成加法运算。
a + b; // 正确 + a; // 错误
- 重载运算符不改变运算符原有的优先级。
- 不能创建新的运算符(只可重载标准运算符)。
- 不能重载以下运算符:
-
sizeof
:sizeof运算符 -
.
:成员运算符 -
.*
:成员指针运算符 -
::
:作用域解析运算符 -
?:
:条件运算符 -
typeid
:一个RTTI运算符 -
const_cast
:强制类型转换运算符 -
dynamic_cast
:强制类型转换运算符 -
reinterpret_cast
:强制类型转换运算符 -
static_cast
:强制类型转换运算符
-
- 以下运算符只能通过成员函数重载:
-
=
:赋值运算符 -
()
:函数调用运算符 -
[]
:下标运算符 -
->
:通过指针访问类成员的运算符
-