- 运算符重载,需使用被称为运算符函数的特殊函数形式。运算符函数的格式如下:
operatorop(argument-list)
//例如operator+() 重载+运算符;operator*() 重载*运算符;
//op必须是有效的C++运算符,不能虚构一个新的符号。
- C++对用户定义的运算符重载的限制:
-
重载后的运算符必须至少有一个操作数是用户定义的类型,这是防止用户为标准类型重载运算符。
-
使用运算符时不能违反运算符原来的句法规则。不能修改运算符的优先级。
-
不能创建新运算符。
-
不能重载下列运算符
-
sizeof:sizeof运算符
-
. :成员运算符
-
.* : 指针成员运算符
-
:: :作用域解析运算符
-
?: :条件运算符
-
typeid:一个RTTI运算符
-
const_cast :强制类型转换运算符
-
dynamic_cast : 强制类型转换运算符
-
reinterpret_cast : 强制类型转换运算符
-
static_cast : 强制类型转换运算符
-
-
通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。
-
创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend:
friend Time operator*(double m,const Time &t);
- 虽然operator*()函数是在类声明中声明的,但它不是成员函数,因此不能使用成员运算符来调用;
- 虽然operator*()函数不是成员函数,但它与成员函数的访问权限相同。
第二步是编写函数定义。不是成员函数所以不要使用Time::限定符。不要在定义中使用关键字friend。