注意事项:
1.除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,
C++中的所有运算符都可以重载。
2.重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。
3.运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。
4.重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
5.运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,
或者用于用户自定义类型的对象和内部类型的对象混合使用时。
6.运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,
避免没有目的地使用重载运算符。
例:下列关于运算符重载的描述中,( B )是正确的。
A :运算符重载可以改变运算数的个数。
B :运算符重载可以改变优先级。
C :运算符重载可以改变结合性。
D :运算符重载不能改变语法结构。
例:如果表达式++i*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( B )。
A :operator*(i.operator++(),k)
B :operator*(operator++(i),k)
C :i. operator++().operator*(k)
D :k.operator*(operator++(i))
例:在下列成对的表达式中,运算符“+”的意义不相同的一对是( C )。
A :5.0+2.0 和 5.0+2
B : 5.0+2.0和 5+2.0
C :5.0+2.0 和 5+2
D : 5+2.0 和 5.0+2
解:A 中是double + double, 后者虽然是double + int, 但是系统会将2转换为double类型的2.0,所以还是double + double
B 同理
C左边是double+double右边是int +int
D都是double + double
所以应该选C
例:下列关于运算符重载的叙述中,正确的是
A.通过运算符重载,可以定义新的运算符
B.有的运算符只能作为成员函数重载
C.若重载运算符+,则相应的运算符函数名是+
D.重载一个二元运算符时,必须声明两个形参
解:[解析] 运算符重载只能重载现有的运算符,不能创建新的运算符。
在重载( )、[ ]、->、=时必须将重载函数声明为成员函数,而不能声明为友元函数。
重载二元运算符为成员函数时,该函数只有一个形参,另外一个参数则隐含为本对象自身。
重载的一般形式为: 类型 类名::operator重载运算符(参数列表){……}
重载成员函数与非成员函数以及友元函数 :
重载为成员函数时参数将会被调用,例如是二元运算重载,第一个参数成了调用对象,第二的才是真正的参数
将二元操作符重载为非成员函数时,两边参数可以互换,但效率没重载为成员函数时的高,而且函数内不能直接读取private成员。
重载为友元函数的话,既可直接访问private成员,又可以互换参数