目的:掌握构造函数及析构函数执行的先后顺序
代码如下:
#include
<iostream>
using namespace std;
class A
{
private:
int a;
protected:
int b;
public:
int c;
public:
A(int a,int b,int c):a(a),b(b),c(c)
{
cout<<"A
构造:"<<"
"<<a<<"
"<<b<<"
"<<c<<endl;
}
~A()
{
cout<<"A
析构:"<<"
"<<a<<"
"<<b<<"
"<<c<<endl;
}
};
class AA
{
private:
int g;
protected :
int h;
AA(int g,int h):g(g),h(h)
{
cout<<"AA
构造:"<<"
"<<g<<"
"<<h<<endl;
}
~AA()
{
cout<<"AA
析构:"<<"
"<<g<<"
"<<h<<endl;
}
};
class B: public AA,public A
{
private:
int d;
protected:
int e;
public:
int f;
public:
A a2;
A a1;
B(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int
k,int l,int m,int
n):A(a,b,c),AA(g,h),d(d),e(e),f(f),a1(i,j,k),a2(l,m,n)
{
cout<<"B
构造:"<<"
"<<d<<"
"<<e<<"
"<<f<<endl;
}
~B()
{
cout<<"B
构造:"<<"
"<<d<<"
"<<e<<"
"<<f<<endl;
}
};
int main()
{
A s1(10,20,150);
B B(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
return 0;
}
运行结果:
http://s3/middle/892d87ff4b17554bcfd82&690
对执行结果的分析:如果派生类继承了多个基类,在派生类中调用基类构造函数时,是按照继承时的先后顺序来调用的(此程序中派生类B先继承的AA类,再继承的是A类),在派生类中若有多个子对象时(此程序中先声明的是a2子对象,后声明的是a1子对象),是按照子对象声明的先后顺序来构造;最后执行派生类自身的构造函数。析构函数执行相反!
加载中,请稍候......