1. 重载操作符
(1)重载操作符必须有一个类类型操作数,即无法重载内置类型的操作符
(2)优先级和结合性是固定的
(3)不再具备短路求值特性。(不建议重载 && ,|| 或逗号操作符)
(4)作为类成员的重载操作符函数,其形参数目比操作数数目少1,隐含的this形参限定为指向第一个操作数
(5)操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元!!!
(6)使用操作符和重载的操作符函数效果是等同的
cout<< operator+(obj1,obj2)<
cout<< obj1+obj2 << endl;
(7)类的操作符设计:
a. 相等测试操作应使用==;
b. 一般通过重载位移操作进行输入和输出 ;
c. 测试对象是否为空可用!表示 ;
d. 如果一个类有算术操作符或者位操作符,那么也应该提供相应的复合赋值操作符(如定义了+ , 那么也该提供+=)
e. 如果定义了==操作符,那么也该提供!=操作符,后者直接调用前者 ;
f. 赋值=、下标[] 、调用() 和成员访问箭头-> 等操作符必须定义为成员,否则会出现编译错误;
像赋值一样,复合赋值操作符通常也应定义为类的成员,但即使不这么做也不会出现编译错误;
改变对象状态或与给定类型紧密联系的其他操作符,如自增、自减、解引用,通常应定义为类成员;
对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为非成员函数。
2. 输入和输出操作符
(1)输入输出操作符必须为非成员函数,否则,左操作数为重载操作符的类对象,与正常使用方式正好相反。
(2)输入输出操作符的重载一般定义如下
ostream & operator<<(ostream &os , const ClassType &obj) { ... }
istream & operator>>(istream &is , ClassType &obj) { .. }
4. 赋值操作符
赋值必须返回对*this的引用(即左操作数的引用)
其他(略)
8. 调用操作符和函数对象
阅读(576) | 评论(0) | 转发(0) |