简单程序阅读题析构函数

yulena11 2009-06-20 07:46:27
Message:Text=HelloText=10

2. #include<iostream>
using namespace std;
class MyClass
{
int a,b;
public:
MyClass(int x=0,int y=0);
~MyClass();
};
MyClass::MyClass(int x,int y):a(x),b(y)
{
cout<<"This is a constructor!a+b="<<a+b<<endl;
}
MyClass::~MyClass()
{
cout<<"This is a destructor!"<<endl;
}
void main()
{
MyClass x,y(10,20),z(y);
}

[答案] This is a constructor!a+b=0
This is a constructor!a+b=30
This is a destructor!
This is a destructor!
This is a destructor!

为什么构造函数只打印出2次呢
而析构函数有三次??
...全文
46 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunhenry 2009-06-20
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class MyClass
{
int a,b;
public:
MyClass(int x=0,int y=0);
MyClass(MyClass& rec);//这是拷贝构造函数
~MyClass();
};
MyClass::MyClass(int x,int y):a(x),b(y)
{
cout <<"This is a constructor!a+b=" <<a+b <<endl;
}
MyClass::~MyClass()
{
cout <<"This is a destructor!" <<endl;
}
MyClass::MyClass(MyClass &rec)//这是拷贝构造函数
{
cout <<"This is a copy constructor!a+b=" <<rec.a+rec.b <<endl;
}
void main()
{
MyClass x,y(10,20),z(y); //最后调用的是拷贝构造函数
}
//楼主不明白拷贝构造,书上都有,建议看看。
Walf_ghoul 2009-06-20
  • 打赏
  • 举报
回复
对象销毁时调用其析构函数,每个对象一次,故有三次析构。。。
Walf_ghoul 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yulena11 的回复:]
引用 1 楼 goodname 的回复:
MyClass z(y);
这里使用默认的拷贝构造函数建立了一个对象z
所以,你共有,x,y,z三个对象,所以析购3次


z拷贝y 那为什么不再输一次This is a constructor!a+b=30
[/Quote]

MyClass x,y(10,20),z(y); 

x,y定义时调用了MyClass的构造函数而z是用y复制,默认的复制是按成员赋值,并不复制构造函数。。。
liao05050075 2009-06-20
  • 打赏
  • 举报
回复
z拷贝y用的系统自动给你添加的拷贝构造函数,不是用的MyClass::MyClass(int x,int y):a(x),b(y) 这个
yulena11 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
MyClass z(y);
这里使用默认的拷贝构造函数建立了一个对象z
所以,你共有,x,y,z三个对象,所以析购3次
[/Quote]
z拷贝y 那为什么不再输一次This is a constructor!a+b=30
liao05050075 2009-06-20
  • 打赏
  • 举报
回复
昏菜。。看错了。
1楼正解
liao05050075 2009-06-20
  • 打赏
  • 举报
回复
因为创建x对象时,使用的默认的无参构造函数,所以没有输出。但是析构时都是用的同一个析构函数
goodname 2009-06-20
  • 打赏
  • 举报
回复
MyClass z(y);
这里使用默认的拷贝构造函数建立了一个对象z
所以,你共有,x,y,z三个对象,所以析购3次

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧