在 C# 中跨继承链接构造函数非常方便且有用。在 C++ 中实现类似功能的最佳方式是什么?这就是我想表达的:
struct A
{
A(int p)
{
i = p;
}
int i;
};
struct B : virtual A
{
B(int q) : A(q)
{
}
};
struct C : virtual B
{
C(int r) : B(r) // call B::B() which in turn would call A::A()
{
}
};
有什么想法吗?
干杯, 查理。
最佳答案
最派生类(即C
)负责构造所有虚基类。因此,C
可以初始化 A
和 B
:
C(int r) : A(r), B(r)
请注意,虚拟基类在任何非虚拟基类之前初始化。没有办法让 B
初始化虚拟基类 A
。
你可以一起破解一些东西,例如通过使虚拟基础 A
默认可构造,然后给它一个 B
可以在其构造函数中调用的“初始化”方法,但这样做可能会被证明是危险的。当为B
基类子对象调用B
构造函数时,它无法知道是否派生了C
的其他基类实际上 A
已经被初始化(并且可能已经使用了 A
)或者它是唯一一个将尝试初始化 A
的类>.
关于c++ - 使用虚拟继承链接 C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11939905/