Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69905
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-27 15:04
个人简介

记录,分享

文章分类

全部博文(43)

文章存档

2017年(24)

2015年(1)

2014年(18)

我的朋友

分类: C/C++

2017-03-16 10:59:01

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. 调用操作符和函数对象
阅读(582) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~