首先,我们知道,一个类在含有自己创建的带参数的构造函数时,创建对象时不会执行默认构造函数,也就是说一定要传递一个参数,这个基类的参数和派生类中的数据成员内嵌对象一样,都可以在初始化列表内初始化。例如:
CDerive(int m,int a, int b, int c) :CBase1(m),CBase2(m),b1(a), b2(b), c(c){}
上面这行代码为派生类的构造函数,其中CDerive为派生类,CBase1和CBase2为两个基类,b1 b2为两个内嵌对象,c为int类型变量。
在main函数中创建这个派生类的对象,程序会先执行CBase1和CBase2两个类的构造函数,为CDerive从CBase1和CBase2继承而来的成员进行初始化,然后在执行内嵌对象和其他数据成员,初始化内嵌对象时还会调用内嵌对象的构造函数,若这些所有的构造函数(包括派生类)都要输出一个‘1’的话,那么结果应该输出五个‘1’。
析构函数和构造函数执行的顺序正好相反,哪个构造函数最先执行,那么他所对应的析构函数就最后执行。