继承时构造函数和析构函数的执行顺序
单一继承:先调用父类构造函数,再调用子类的构造函数。
多重继承:调用父类构造函数的顺序是继承时的顺序(父类->爷爷类->...子类),最后调用子类构造函数。
#include<iostream>
using namespace std;
class C{
public:
C(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
~C(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
};
class B{
public:
B(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
~B(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
};
//类的多继承中,构造函数的执行顺序便与“继承声明”顺序相
//1.构造和析构顺序:B()->C()->A()->~A()->~C()->~B()
class A : public B, public C{
//2.1.构造和析构顺序:C()->B()->A()->~A()->~B()->~C()
//class A : public C, public B{
public:
A(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
~A(){cout<<__FUNCTION__<< "() "<< " line = " << __LINE__ <<endl;}
};
int main(){
A a;
return 0;
}
结论:C++类的多继承中,构造函数的执行顺序便与“继承声明”顺序相同 。