#include<iostream>
using namespace std;
class ABCD
{
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:
ABCD abcd1;//c++编译器不知道如何构造abcd1;先执行这个函数的构造函数
ABCD abcd2;
const int m;
};
int doThing(MyE mye1)
{
//printf("doThing() mye1,abcd1,a:%d \n",mye1.abcd1.getA());//有问题一直通过不了
printf("doThing() mye1,abcd1,a:%d \n");
return 0;
}
int run2()
{
MyE myE;//用MyE类定义myE对象之后会调用MyE():abcd1(1,2,3),abcd2(4,5,6),m(100)
doThing(myE);//实参初始化形参,并调用这个形参类的拷贝构造函数
return 0;
}
int run3()
{
printf("run3 star..\n");
printf("run3 end..\n");
return 0;
}
int main()
{
run2();
//run3();
system("pause");
return 0;
}
强化练习1--构造和析构的调用顺序
猜你喜欢
转载自blog.csdn.net/QQ960054653/article/details/55189823
今日推荐
周排行