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个回答

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

newbieLCQ
newbieLCQ 既然返回的临时变量没有变为什么能实现后置++的功能呢?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐