C++类构造析构调用顺序训练(复习专用)

时间:2021-10-16 01:23:59
//对象做函数参数
//1 研究拷贝构造
//2 研究构造函数,析构函数的调用顺序 //总结 构造和析构的调用顺序 #include "iostream"
using namespace std; class ABCD
{ //this()
public:
ABCD(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c);
}
~ABCD()
{
printf("~ABCD() construct,a:%d,b:%d,c:%d \n", this->a, this->b, this->c);
}
int getA()
{
return this->a;
}
protected:
private:
int a;
int b;
int c;
}; class MyE
{
public:
MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)
{
cout << "MyD()" << endl;
}
~MyE()
{
cout << "~MyD()" << endl;
}
MyE(const MyE & obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)
{
printf("MyD(const MyD & obj)\n");
} protected:
//private:
public:
ABCD abcd1; //c++编译器不知道如何构造abc1
ABCD abcd2;
const int m; }; int doThing(MyE mye1)
{
printf("doThing() mye1.abc1.a:%d \n", mye1.abcd1.getA());
return 0;
} int run2()
{
MyE myE;
doThing(myE);
return 0;
} //
int run3()
{
printf("run3 start..\n"); ABCD abcd = ABCD(100, 200, 300); //用临时对象来初始化一个对象,就会把临时对象变化成要初始化的对象,而不会调用copy构造函数,临时对象也不用将自己赋值给对方,然后自己销毁这么麻烦. //ABCD(400, 500, 600); //临时对象的生命周期
printf("run3 end\n");
return 0;
} int main()
{
run2();
//run3();
system("pause");
return 0;
}

  

输出\

C++类构造析构调用顺序训练(复习专用)