1、构造函数的调用顺序
基类构造函数、成员构造函数、派生类的构造函数
class D
{
public:
D()
{
cout<<"成员执行了"<<endl;
}
} ;
class A
{
public:
A()
{
cout<<"基类执行了"<<endl;
};
};
class C:public A
{
public:
C()
{
cout<<"派生类。执行了"<<endl;
};
private:
D d;
};
int main()
{
C *c;
c=new C();
}
执行的结果如图所示
如果是多继承的话,按照继承的顺序调用构造函数,比如
class C:public A,B
{
}
那么先执行A的构造函数,然后再执行B的构造函数
成员也类似,在前面的成员先执行构造函数
2、析构函数的调用顺序
派生类析构函数、成员析构函数、基类析构函数(与构造顺序相反)
class B
{
public:
~B()
{
cout<<"基类B执行了"<<endl;
}
};
class D
{
public:
~D()
{
cout<<"成员D执行了"<<endl;
}
} ;
class E
{
public:
~E()
{
cout<<"成员E执行了"<<endl;
}
} ;
class A
{
public:
~A()
{
cout<<"基类A执行了"<<endl;
};
};
class C:public A,B
{
public:
~C()
{
cout<<"派生类执行了"<<endl;
};
private:
E e;
D d;
};
int main()
{
C *c;
c=new C();
delete c;
}