newbieLCQ 2017-02-11 06:57 采纳率: 0%
浏览 1076

c++运算符重载即++运算符重载的问题

 class Triangular_iterator
{
public:
    Triangular_iterator( int index ) : _index( index-1 ){} //***

    bool operator==( const Triangular_iterator& ) const;
    bool operator!=( const Triangular_iterator& ) const;
    int  operator*() const;
    Triangular_iterator& operator++();       // prefix version
    Triangular_iterator  operator++( int );  // postfix version

private:
    void check_integrity() const;  
    int _index;
};
operator++()            //前置版本
{   // prefix instance
    ++_index;
    check_integrity();
    return *this; 
}

inline Triangular_iterator Triangular_iterator::
operator++( int )              //后置版本
{   // postfix instance

    Triangular_iterator tmp = *this;
    ++_index; 
    check_integrity();   
    return tmp; 
}

我的问题:
1.后置版本的++运算为什么要返回一个临时对象?
2.后置版本是否是新建了一个Triangular_iterator并将运算符的调用对象复制,那么为什么没有重载=运算符就能运算成功?
3.后置版本中的++_index到底是哪个对象的_index,是tmp的还是this的,最后返回的临时对象中的_index+1了吗?

  • 写回答

1条回答 默认 最新

  • 坤昱 《一起学习C语言》专栏作者 2017-02-11 08:18
    关注

    1.因为你创建的不是指针对象,数据是拷贝过去的,所以地址与this不同,2.接收this值调用的默认拷贝构造函数,3.返回的地址是你创建对象的地址与this不同。++的参数值还是this指向的变量值,如果你用创建的对象调用变量,增加便不是this指向的变量值。

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制