1. 不允许定义新的运算符单词,在运算符集合不够时,你可以采用函数调用的记法形式。
2. 运算符函数的名字是由关键字operator后跟对应的运算符构成的。使用运算符不过是显示调用运算符函数的一种简写形式。例如a+b => a.operator+(b)
3. 二元运算符可以定义为取一个参数的非静态成员函数,也可以定义为取两个参数的非成员函数。如果两者都有定义,那么就按照重载解析来确定究竟应该用哪个定义。
4. 对一元运算符,无论它是前缀的还是后缀的,都可以定义为无参数的非静态成员函数,或者定义为取一个参数的成员函数。
5. 由于历史的偶然性,运算符=(赋值),&(取地址),和,(序列)在应用于类对象时已经有了预先定义的意义。通过将它们定义为私用,就可以使普通用户无法访问这些预定义的意义。
6. 枚举也是用户定义类型,因此可以为它们定义运算符。
7. 成员函数X::operator T(),其中的T是一个类型名,就定义了一个从X到T的转换。
8. 对于一个类型而言,最好是或者依靠用户定义转换,或者依靠用户定义运算符,但不要两者都用。
9. 能合法进行的用户定义隐式转换只有一层。
10. 与类成员函数一样,友元函数也是在将它视为友元的类中明确声明的,因此,它也将像成员函数一样成为类界面的一部分。
11. operator[]的第二个参数(下标)可以具有任何类型,这就使我们可以去定义vector,关联数组等。
12. 一个活动起来像函数的对象称作一个拟函数对象,或者简称为函数对象。
13. 运算符()的最明显,或许也是最重要的应用视为对象提供常规的函数调用语法形式,使它们具有像函数似的行为方式。
14. 重载->的最有用之处是创建所谓的“灵巧指针”,也就是一种行为像是指针的对象,通过它们去访问对象时,可以执行一些附加的操作。
15. 这里用int参数指明这个函数视为++的后缀使用而调用的。这个int绝不会用,该参数根本就是虚设的,只是为了区别前缀和后缀应用。
练习题:3, 4, 5