第14章 重载操作符与转换
1 重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义
2 操作符重载成成员函数还是普通非成员函数的一些指导原则:
a) = 、[]、 ()、->等操作符必须定义为成员,否则编译出错
b) 复合复制操作符(+=)通常应定义为类的成员
c) 改变对象状态或与给定类型紧密联系的其他一些操作符,如自增、自检、和解引用,通常应定义为类成员
d) 对称的操作,如算数操作符、相等操作符、关系操作符、和位操纵符,最好定义为普通非成员函数。
3 重载IO操作符应设为友元。
4 赋值返回一个引用,就不需要创建和撤销结果的临时副本。
5 ->成员访问操作符重载,返回值的约束:必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
a) 如果返回类型是指针,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员
b) 如果返回类型是类类型的对象(或引用),则将递归应用该操作符,直到返回一个指向带有指定成员高的对象的指针,否则出错
6 函数对象(定义了调用操作符的类的对象)常用于覆盖算法使用的默认操作符。
7 转换操作符的限制:
a) 必须是成员函数
b) 不能指定返回类型
c) 形参表必须为空
d) 只允许一次类类型转换
operate int() const {return val;}