首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++构造函数跟析构函数的调用顺序,乱拉直接

2012-08-01 
c++构造函数和析构函数的调用顺序,乱拉直接#includeiostreamusing namespace stdclass Compute{public:

c++构造函数和析构函数的调用顺序,乱拉直接
#include<iostream>
using namespace std;
class Compute
{
public:
 Compute (int);
 Compute (Compute &); 
 ~Compute()
 {
 cout<<"Destructor=>"<<a<<endl;
 }
private:
 int a;
};
Compute::Compute(int x)
{
 a=x;
  cout<<"Constructor=>"<<a<<endl;
}
Compute::Compute(Compute &x)
{
 a=x.a; cout<<"A=>"<<a<<endl;
}
Compute compute(Compute);
int main()
{
 Compute c1(1);
 Compute c2=compute(Compute(2));
 c1=compute(c1);
 return 0;
}
Compute compute(Compute x)//为什么这个返回值是Compute的函数建立形参时调用构造函数时是调用Compute (Compute &);,不是Compute (int)?????

{
 return x;
}
运行结果是,从第四行就迷糊啦,请求解答。。。。。。



[解决办法]
结果是:
Constructor=>1 //Compute c1(1);
Constructor=>2 //compute(Compute(2));中的Compute(2)这个临时对象
A=>2 // Compute c2=而引起的调用拷贝构造
Destructor=>2 //compute(Compute(2))中临时对象的析构
A=>1 //compute(c1) 中c1拷贝个临时参数
A=>1 //c1= 引起的拷贝构造
Destructor=>1 //compute(c1) 中c1拷贝个临时参数的析构
Destructor=>1 //c1= 引起的拷贝构造
Destructor=>2 //c2的析构
Destructor=>1 //c1的析构
[解决办法]
http://hi.baidu.com/qiaolw/blog/item/e60a8dc52ff337c8d00060cf.html
[解决办法]
compute(Compute(2));调用时的执行过程是先生成一个对象Compute(2),然后将生成的对象拷贝给compute函数的形参,需要调用复制构造函数。

探讨

请问,在Compute c2=compute(Compute(2));调用函数computer时,不用调用复制构造函数吗?

[解决办法]
compute(Compute(2));调用时的执行过程是先生成一个对象Compute(2),然后将生成的对象拷贝给compute函数的形参,需要调用复制构造函数。
探讨

请问,在Compute c2=compute(Compute(2));调用函数computer时,不用调用复制构造函数吗?

[解决办法]
compute接口原型是 Computer compute(Computer a);调用时需要对形参a进行初始化,所以需要调用复制构造函数
探讨

请问,在Compute c2=compute(Compute(2));调用函数computer时,不用调用复制构造函数吗?

热点排行