newbieLCQ
newbieLCQ
采纳率0%
2017-02-11 06:57 阅读 1.1k

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条回答 默认 最新

  • a29562268 坤昱 2017-02-11 08:18

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

    点赞 1 评论 复制链接分享

相关推荐