gpt4 book ai didi

c++ - 基类的多重虚继承和构造函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:19 25 4
gpt4 key购买 nike

有这段代码:

#include <iostream>

class Bazowa
{
int x;
public:
Bazowa() : x(55){}
Bazowa(int x_) : x(x_) {}
void fun()
{
std::cout << x << "fun\n";
}
};

class Pochodna1 : virtual public Bazowa
{
public:
Pochodna1() : Bazowa(101) {}
};

class Pochodna2 : virtual public Bazowa
{
public:
Pochodna2() : Bazowa(103) {}
};

class SuperPochodna : public Pochodna1, public Pochodna2
{
public:
SuperPochodna() : {}
};


int main() {
SuperPochodna sp;
sp.fun(); // prints 55fun

return 0;
}

执行此程序后,它将打印“55fun”。类 Pochodna1 和 Pochodna2 中的构造函数调用发生了什么——它们被忽略了吗?为什么 Bazowa 类的成员 'x' 设置为 '55',而不是 '101' 或 '103'?

最佳答案

虚基构造函数总是从最终叶类中调用。没有调用虚拟基的其他构造函数。在您的情况下,SuperPochodna() 正在调用 Bazowa() 并在 Pochodna1 中调用 Bazowa(int)Pochodna2 未使用。

参见 http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14或者只是谷歌“虚拟基础构造函数”。

关于c++ - 基类的多重虚继承和构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com