-
重载语法
opreator+(type value)
-
重载示例
// heavy load example #include <iostream> using namespace std; namespace mytime { class Time { private: int hours; int minutes; public: Time() { hours = minutes = 0; } Time(int h, int m = 0) { hours = h; minutes = m; } ~Time() { } void AddMin(int m) { minutes += m; hours += minutes / 60; minutes %= 60; } void AddHr(int h) { hours += h; } void Reset(int h, int m) { hours = h; minutes = m; } /* 加法成员函数 */ 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 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; /* 不要返回指向局部变量或临时对象的引用。 * 函数执行完毕 ,局部变量和临时对象将消失,引用将指向不存在的数据 */ } void Show() const { cout << hours << " hours," << minutes << " minutes\n"; } }; } int main() { mytime::Time t1(2, 40); t1.Show(); mytime::Time t2(3, 20); mytime::Time t3 = t1 + t2; t3.Show(); return 0; }
-
重载限制
重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。
使用运算符时不能违反运算符原来的句法规则。例如,不能将求模运算符(%)重载成使用一个操作数,.不能修改运算符的优先级。
不能创建新的运算符
不能重载运算符列表
.:成员访问运算符
.*:成员指针访问运算符
:::作用域运算符
sizeof:长度运算符
?::条件运算符
#: 预处理符号
typeid: 一个RTTI运算符
const_cast: 强制类型转换运算符
dynamic_cast: 强制类型转换运算符
reinterpret_cast: 强制类型转换运算符
static_cast: 强制类型转换运算符只允许成员函数进行重载的运算符
=: 赋值操作符
(): 函数调用运算符
[]:下表运算符
->:通过指针访问类成员的运算符