C++ 重载操作符与转换
第五章介绍过,C++ 定义了许多内置类型间的操作符和自动转换。使用这些设施程序员能够编写丰富的混合类型表达式。
C++ 允许我们重定义操作符用于类类型对象时的含义。如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型。
通过操作符重载,程序员能够针对类类型的操作数定义不同的操作符版本。第十三章阐述了赋值操作符的重要性并介绍了怎样定义赋值操作符。我们第一次使用重载操作符是在第一章,那里程序用移位操作符(>> 和 <<)进行输入输出,用加号操作符(+)将两个 Sales_items 相加。本章我们终于可以看到怎样定义这些重载操作符了。
通过操作符重载,可以重定义第五章介绍的大多数操作符,使它们用于类类型对象。明智地使用操作符重载可以使类类型的使用像内置类型一样直观。标准库为容器类定义了几个重载操作符。这些容器类定义了下标操作符以访问数据元素,定义了 * 和 -> 对容器迭代器解引用。这些标准库的类型具有相同的操作符,使用它们就像使用内置数组和指针一样。允许程序使用表达式而不是命名函数,可以使编写和阅读程序容易得多。将
cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << endl;
和以下更为冗长的代码相比较就能够看到。如果 IO 使用命名函数,类似下面的代码将无法避免:
// hypothetical expression if IO used named functions
cout.print("The sum of ").print(v1).
print(" and ").print(v2).print(" is ").
print(v1 + v2).print("\n").flush();