Bra_Hancock 2017-05-16 14:48 采纳率: 0%
浏览 1069

自增运算符重载后连续使用出错

下例中,如果前++函数返回值是引用就正确。
(1)如果是对象,在程序结束前,cc的值只增加了1。但是如果简单一个int j,(++j)++是不会错的。
(2)如果是对象,并且使用了copy构造函数,后++函数中的*this是前++返回值的copy,并且没有初始化。
对于这2种情况都不是很明白。

 #include <iostream>
using namespace std;

class CC
{
public:
    CC(int a);
    //CC(CC & cc1);                         //(2)
    CC & operator ++();                   //(1)
    const CC operator ++(int); 
private:
    int mm;
};

CC::CC(int a = 0)
{
    mm = a;
}

CC & CC::operator ++()                  //(1)
{
    mm++;
    return * this;
}

const CC CC::operator ++(int)
{
    CC temp = * this;
    (this->mm)++;
    return temp;
}
/*
CC::CC(CC & cc1)                       //(2)
{
    cout << "Copy Constructor." << endl;
}
*/

int main()
{
    CC cc;
    (++cc)++;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 魏尔肖 2017-05-17 03:49
    关注

    (1)返回的对象的话只是返回一份拷贝,再++就不是cc的m++了,返回引用的话就是返回cc的m了

    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法