运算符重载
*
运算符就是运算符重载的一个例子,可以用作乘法,也可以用于操作地址获取存储在地址中的值。
要重载一个运算符,可以这么写:
operatorop(argument-list)
op是运算符,比如operator+()
重载+
,operator*()
重载*
。
注意,重载运算符有限制:
- 首先重载后的运算符必须至少有一个操作数是用户定义的类型。
- 使用运算符不能违反运算符原有的句法规则,不能修改运算符的优先级。
- 不能创建新运算符。
- 不能重载下面的运算符:
sizeof
、.
、.*
、::
、?:
、typeid
、const_cast
、dynamic_cast
、reinterpret_cast
、static_case
。 - 大多数运算符可以通过成员或非成员函数重载,但下面的只能通过成员函数重载:
=
、()
、[]
、->
。
友元
C++控制对类对象私有部分的访问,通常,公有类方法提供唯一的访问途径,不过限制太大。C++提供了另一种形式的访问权限,友元:友元函数、友元类、友元成员函数。
友元函数使用friend关键字,在类中定义原型:
friend Time operator*(double m, const Time& t);
operator*()
函数在类声明中声明,但它不是成员函数,因此不能使用成员运算符来调用,不过与成员函数的访问权限相同。
编写友元函数定义时,不使用类作用域,定义:
Time operator*(double m, const Time& t){}