.1 分析以下程序的执行结果
#include
class base
{
public:
base(){cout<<"constructing base class"<~base(){cout<<"destructing base class"<};
class subs:public base
{
public:
subs(){cout<<"constructing sub class"<~subs(){cout<<"destructing sub class"<};
void main()
{
subs s;
}
解:
本题说明单继承情况下构造函数和析构函数的调用顺序。这里base为基类,subs为派生类。
所以输出为:
constructing base class
constructing sub class
destructing sub class
destrcuting base class
注意:在单继承情况下,首先调用基类的构造函数 ,随后调用派生类的构造函数,析构函数的调用顺序则正好相反。
6.2 分析以下程序的执行结果:
#include
class base
{
int n;
public:
base(int a)
{
cout<<"constructing base class"<n=a;
cout<<"n="<}
~base(){cout<<"destructing base class"<};
class subs:public base
{
base bobj;
int m;
public:
subs(int a,int b,int c):base(a),bobj(c)
{
cout<<"constructing sub cass"<m=b;
cout<<"m="<}
~subs(){cout<<"destructing sub class"<};
void main()
{
subs s(1,2,3);
}
解:
本题说明 派生类中含有对象成员情况下构造函数和析构函数的调用顺序。这里base为基类,subs为派生类,subs类的构造函数中含有对象成员。
所以输出为:
constrcuting base class
n=1
constructing base class
n=3
constructing sub class
m=2
destructing sub class
destructing base class
destructing base class
注意:当派生类中含有对象成员时,构造函数的调用顺序如下:
1)基类的构造函数
2)对象成员的构造函数
3)派生类的构造函数
析构函数的调用顺序与之相反
6.3 分析以下程序的执行结果
#include
class A
{
public:
int n;
};
class B:public A{};
class C:public A{};
class D:public B,public C
{
int getn(){return B::n;}
};
void main()
{
D d;
d.B::n=10;
d.C::n=20;
cout<