C++语法题

#include <iostream.h>

class human
{
public:
human(){ human_num++;};
static int human_num;
~human(){
human_num--;
print();
}
void print()
{
cout<<"human num is: "<<human_num<<endl;
}
protected:
private:
};
int human::human_num = 0;

human f1(human x)
{
x.print();
return x;
}

int main(int argc, char* argv[])
{
human h1;
h1.print();
human h2  = f1(h1);
h2.print();

return 0;
}
输出:

1

1

0

0

-1

-2

----------------------------

分析:

human h1;       //调用构造函数,---hum_num = 1;
h1.print();     //输出:"human is 1"
human h2  = f1(h1);
               //再调用f1(h1)的过程中,由于函数参数是按值传递对象,调用默认的复制构造函数,它并没有对hum_num++,所以hum_num 仍= 1,所以x.print()输出:"human is 1";   在推出f1函数时,要销毁X,调用析构函数(human_num--),输出:"human is 0"(,由于该函数返回一个human 对象,所以又调用默认构造函数,创建一个临时对象(human_num = 0;),把临时对象赋给h2,又调用默认构造函数(  human_num = 0);  
h2.print();   //输出: human is 0;

//在退出main()函数是,先销毁h2,调用析构函数(human_num--),输出 "human_num is -1"
 然后销毁h1,调用析构函数(--),输出"human_num is -2"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值