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条)

报告相同问题?