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 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛