gpt4 book ai didi

c++ - 使用虚拟继承链接 C++ 构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:33 25 4
gpt4 key购买 nike

在 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 可以初始化 AB:

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/

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