C++学习笔记——多继承机制下构造函数的调用顺序(1)
程序员文章站
2022-05-14 12:04:36
...
多继承方式下派生类的构造函数必须同时负责该派生类所有基类构造函数的调用。
构造函数的调用顺序为:先调用所有基类的构造函数,再调用派生类中子对象类的构造函数(如派生类中的子对象),最后调用派生类的构造函数。
处于同一层次的各基类构造函数的调用顺序取决于派生类所指定的基类顺序,与派生类构造函数中所定义的成员初始化列表顺序无关。
举个栗子:
基类:
class Base1
{
public:
Base1(int i) { a = i; cout << "Constructing Base1 a = " << a << endl; } // 构造函数
private:
int a;
};
class Base2
{
public:
Base2(int i) { b = i; cout << "Constructing Base2 b = " << b << endl; } // 构造函数
private:
int b;
};
派生类:
class Derivedclass :public Base1, public Base2 // 构造函数调用顺序 Base1 => Base2 => Derivedclass
{
public:
Derivedclass(int i, int j, int k);
private:
int d;
};
Derivedclass::Derivedclass(int i, int j, int k) :Base2(i), Base1(j)
{
d = k;
cout << "Constructing Derivedclass d = " << d << endl;
}
主函数:
int main()
{
Derivedclass x(4, 5, 6);
return 0;
}
程序分析:在派生类的声明中,先调用了Base,后调用Base2;
在初始化列表顺序中,先调用Base2,后调用Base1;
根据前文解释:应该先初始化Base1,后初始化Base2。
故运行结果为:
Constructing Base1 a = 5
Constructing Base2 b = 4
Constructing Derivedclass d = 6
上一篇: 让PHP支持页面回退的两种方法[转]
下一篇: ArraayList实现排序