Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 操作符++(后缀)的重载
【标  题】:操作符++(后缀)的重载
【关键字】:++
【来  源】:http://blog.csdn.net/HappyTree/archive/2007/01/03/1473100.aspx

操作符++(后缀)的重载

Your Ad Here 下面是一个++操作符重载的例子: 
class Int
{
public:
    Int(
int n = 0) : n_(n) {}

     
  Int operator ++(int)
    
{
        Int temp(
*this);
        n_
++;
        
return temp;
    }


    Int
& operator ++()
    
{
        n_
++;
        
return *this;
    }


private:
    
int n_;
}
;

初看上面的代码,觉得没有什么问题。但我们运行一下下面的代码:

int main()
{
    
int i = 5, j = 10;

    
// 此行编译不过,因为i++是一个右值,不可以作为左值来使用
    i++ = j++;  
    
++= ++j;

    Int A 
= 10, B = 20;
    
// 此行编译通过
    A++ = B++;  
    
++= ++B;

    
return getchar();
}

在i++ = j++;中,我们知道,i++之后返回的是一个临时变量,而内置类型的临时变量是无法做左值的。因此,该行编译出错。但后面的A++ = B++;却能通过编译,这是为什么呢?

原来,A++返回的虽然也是一个临时变量,但该临时变量在该表达式结束之前有效,因此并没有象内置类型那样出现编译错误。

是的,我们应该避免此类问题,我们类的操作符++应该与内置类型的表现一致。我们只需这样修改:

class Int
{
public:
    Int(
int n = 0) : n_(n) {}

    
// add const to avoid things like a++++;
    const Int operator ++(int)
    
{
        Int temp(
*this);
        n_
++;
        
return temp;
    }


    Int
& operator ++()
    
{
        n_
++;
        
return *this;
    }


private:
    
int n_;
}
;

返回一个const,就避免了这种不一致。

区分三种不同的对象构造方式:【上一篇】
深入理解++操作符:【下一篇】
【相关文章】
  • C++老手也要注意的几个"小"问题
  • 用Visual C++制作微秒级精度定时器 (Vb也适用)
  • Visual C++ Error MessagesThis
  • 用VC++实现软件的版本在线升级
  • Visual C++设计UDP协议通讯示例
  • VC++实现对远程计算机屏幕的监视
  • 用Visual C++编程实现局域网多播
  • C++对象布局及多态实现探索之虚继承
  • Visual C++中动态链接库技术浅谈
  • 如何学好C++,用好类库很重要
  • 【随机文章】
  • 实战入侵新浪分站的一台服务器
  • Working with VARRAYs in Oracle Part I
  • 防火墙的关键指标并发连接数指的是什么?
  • C - Create and Free List
  • Unix&&Linux 修改locale
  • Illustrator 无缝拼接图案的快速制作(2)
  • Linux 下使用 IE浏览器
  • konds-apache1.3.31-php2.4.8-resin2.-mysql.conf
  • 在VS2005中安装使用Gadget模板(三)
  • 双绞线详解(4)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.