anhaoxuan 2016-04-30 08:44 采纳率: 100%
浏览 1306
已采纳

关于C++后置运算符重载一个超简单问题

以下代码
#include
using namespace std;
class num
{
public:
num(){n=1;cout<<"构造函数执行\n";}
num(int i){n=i;cout<<"带一个参数的构造函数执行\n";}
num(const num&s){this->n=s.n;cout<<"复制构造函数执行\n";}
~num(){cout<<"析构函数执行\n";}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}

const num operator++(int o)
{
    num temp(*this);
    ++n;
    return temp;
}

private:
int n;
};
int main()
{
num i;
cout<<"i:"<<i.get()<<endl;
i.add();
cout<<"i:"<<i.get()<<endl;
num n=i++;
cout<<"i:"<<i.get()<<endl;
cout<<"n:"<<n.get()<<endl;
return 0;
}

运行后显示

构造函数执行
i:1
i:2
复制构造函数执行
复制构造函数执行
析构函数执行
i:3
n:2
析构函数执行
析构函数执行

请问为什么要执行两次复制构造函数 复制构造的都是什么?
还有请问依次析构的三个对象是什么?
谢谢!!

  • 写回答

3条回答

  • passer.by 2016-04-30 09:11
    关注

    第一次构造:num i;
    第二次构造:num=i++;重载了++运算符,在里面num temp时
    第三次复制构造:return temp;
    这三次都调用了析构函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办