派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用
时间: 2024-02-01 10:17:03 浏览: 29
是的,派生类构造函数的成员初始化列表中必须包含对所有直接基类的构造函数的调用,包括虚基类的构造函数。如果派生类同时继承了多个虚基类,那么必须按照它们在继承列表中的顺序依次调用它们的构造函数。如果不这样做,会导致虚基类对象被多次构造,进而导致程序行为的不可预期。例如:
```c++
class A {
public:
A(int i) {}
};
class B : virtual public A {
public:
B() {}
};
class C : virtual public A {
public:
C() {}
};
class D : public B, public C {
public:
D() {}
};
```
在这个例子中,类 D 继承了类 B 和类 C,这两个类都直接继承了虚基类 A。因此,类 D 的构造函数中必须包含对虚基类 A 的构造函数的调用,例如:
```c++
class D : public B, public C {
public:
D() : A(42), B(), C() {}
};
```
在这个例子中,我们按照 A、B、C 的顺序依次调用它们的构造函数,并且在 A 的构造函数中传递了一个整数参数 42。这样就可以保证虚基类 A 只被构造一次。