Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3275060
  • 博文数量: 346
  • 博客积分: 10189
  • 博客等级: 上将
  • 技术积分: 3125
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 19:46
文章分类

全部博文(346)

文章存档

2013年(35)

2011年(35)

2010年(76)

2009年(48)

2008年(152)

分类: C/C++

2008-09-02 13:07:08

C++主题——重载操作符

1.       重载操作符后,操作符的含义不应该被改变。

2.       重载操作符后,优先级和结合性不变。

3.       重载操作符,应注意如果原操作符是一目操作符,那么重载后仍应该是一目的,以此类推,特别注意:冲在操作符时使用默认实参是非法的。

4.       短路操作符被重载后不再具备短路性。

5.       对于选择友元、成员、非成员的形式,需要在重载前衡量习惯、效率等问题。
        成员形式:
                1)=、[ ]、()、->应定义为一个成员形式
                2)+=、-=等复合赋值操作符,通常定义成成员形式
                3)对那些改变类型的数据成员的状态的操作符,如++、--一般也定义为成员形式
       非成员形式:
               4)对称操作符、如相等、关系、位操作符,定义为非成员函数。
               5)io操作必须为非成员。
               6)一般将算术操作符定义为非成员形式。

6.       重载operator + 和 operator +=时,若将其作为成员形式重载,那么返回类型为T&类型、返回值为*this比较好,可以做连续加法,也可提高效率。

7.       默认情况下,对于类对象,复制操作符表示按位copy,取地址操作符返回对象的值,逗号操作符返回最右边的操作数的值。

8.       逻辑判断操作符在容器中应用比较广,所以如果想将类型放在容器中,又进行类似sort等需要判断逻辑大小关心的操作,应该重载大/小操作符。

9.       对于重载<<操作符有比较一致的要求:
        ostream& operator << (ostream& os, const classtype &object){return os;}
        第一个形参是对ostream对象的引用,在该对象上产生输出。它不能使const因为写入输出流会改变流状态。它必须是一个引用,因为不能复制流。
       返回值是ostream的引用,它的值通常是输出操作符的ostream的对象。
10.   对于重载>>操作符有比较一致的要求:
       istream& operator>>(istream& in,const classtype& object)
       {return in}
       需要注意的是,输入操作符必须处理错误和文件结束的可能性。

11.   算术操作符通常产生一个新值,该值是两个参数的计算结果,它不同于任意一个参数。当我们定义了一个符合运算符,又定义了一个算术操作符,则可以通过符合操作符实现算术操作符。

12.   如果定义了相等操作符,那么它应该同时定义不等操作符。同时,应让一个操作符完成比较对象的实际操作,而另一个调用它。
       stl中很多容器用到了相等操作符,所以当想把他放入容器中时,应该定义相等操作符。

13.   下标操作符必须为成员函数,而且为确保它在作用到赋值操作的左右两边时都表现正常,应该定义const和非const版本的下标操作符,他们都返回引用。

14.   箭头操作符必须被定义为成员形式。它看起来像二元操作符,但是注意他是一元的,不接受实参。返回值必须是指向类类型的指针。这时会有递归调用箭头操作符的情况,应避免。

15.   解引用可定义为成员形式。同时重载const和非const形式。

16.   自增自减操作符定义成成员形式,前缀型无参数,后缀型有参数int。返回值为对象的引用。前缀形式返回新值,后缀形式返回旧值。需显示调用后缀形式。

阅读(4066) | 评论(0) | 转发(1) |
0

上一篇:errno.h错误代码

下一篇:VC下的链接库

给主人留下些什么吧!~~