gpt4 book ai didi

C++ 虚拟继承

转载 作者:IT老高 更新时间:2023-10-28 21:37:53 25 4
gpt4 key购买 nike

问题:

class Base {
public:
Base(Base* pParent);
/* implements basic stuff */
};

class A : virtual public Base {
public:
A(A* pParent) : Base(pParent) {}
/* ... */
};

class B : virtual public Base {
public:
B(B* pParent) : Base(pParent) {}
/* ... */
};

class C : public A, public B {
public:
C(C* pParent) : A(pParent), B(pParent) {} // - Compilation error here
/* ... */
};

在给定的位置,gcc 提示它无法匹配对 Base() 的函数调用,即默认构造函数。但是C并没有直接从Base继承,只能通过A和B。那么为什么gcc会在这里提示呢?

想法?TIA/罗伯

最佳答案

virtual 基类的特殊之处在于它们由最派生类初始化,而不是由继承自虚拟基的任何中间基类初始化。哪个潜在的多个初始化器将是初始化一个基的正确选择?

如果正在构造的最派生类未将其列在其成员初始化列表中,则虚拟基类将使用其默认构造函数进行初始化,该构造函数必须存在且可访问。

请注意,允许在构造函数的初始化程序列表中使用虚拟基标识符,即使它不是相关类的直接基。

关于C++ 虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126522/

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