c++虚继承之后没有调用基类的构造函数
时间: 2023-10-04 14:07:57 浏览: 125
首先,虚继承可以解决多继承时出现的菱形继承问题,即派生类中存在两个或更多个直接或间接地继承同一个基类的情况。虚继承可以保证虚基类在派生类中只有一份拷贝。
在虚继承中,由于虚基类并没有被直接继承,所以派生类需要先调用虚基类的构造函数,再调用自身的构造函数。如果派生类没有显式地调用虚基类的构造函数,那么编译器会自动生成一份默认的构造函数,用于调用虚基类的构造函数。
因此,不管是普通继承还是虚继承,都会调用基类的构造函数。但是,对于虚继承来说,需要显式地调用虚基类的构造函数。否则,编译器会自动生成一个默认的构造函数来调用虚基类的构造函数。
相关问题
C++在派生类构造函数中显示调用基类构造函数时,应该将被调用基类构造函数放在
派生类构造函数的初始化列表中的最前面。这是因为在派生类构造函数执行之前,基类构造函数必须首先被执行。如果您将被调用的基类构造函数放在初始化列表的后面,则编译器会发出警告,因为这可能会导致未定义的行为。此外,如果您需要在派生类构造函数中执行其他操作,例如初始化成员变量或执行其他计算,则应该在调用基类构造函数之后执行这些操作。
c++多继承下调用基类构造函数
在C++多继承中,子类需要调用每个基类的构造函数来初始化基类的成员变量。具体来说,子类的构造函数应该在初始化列表中调用每个基类的构造函数,以确保每个基类的成员变量都能正确地初始化。下面是一个示例代码:
```cpp
class Base1 {
public:
Base1(int x) : m_x(x) {}
int m_x;
};
class Base2 {
public:
Base2(int y) : m_y(y) {}
int m_y;
};
class Derived : public Base1, public Base2 {
public:
Derived(int x, int y, int z) : Base1(x), Base2(y), m_z(z) {}
int m_z;
};
int main() {
Derived obj(1, 2, 3);
std::cout << obj.m_x << " " << obj.m_y << " " << obj.m_z << std::endl; // 输出 1 2 3
return 0;
}
```
在上面的示例代码中,`Derived`类继承了`Base1`和`Base2`两个类。在`Derived`的构造函数中,使用初始化列表调用了`Base1`和`Base2`的构造函数。这样,在`Derived`的构造函数中,每个基类的成员变量都能正确地初始化。
阅读全文