gpt4 book ai didi

c++ - 在 C++ 中,什么是虚拟基类?

转载 作者:bug小助手 更新时间:2023-10-28 01:31:10 25 4
gpt4 key购买 nike

我想知道什么是“虚拟基类”以及它的含义。

让我举个例子:

class Foo
{
public:
void DoSomething() { /* ... */ }
};

class Bar : public virtual Foo
{
public:
void DoSpecific() { /* ... */ }
};

最佳答案

在虚拟继承中使用的虚拟基类是一种在使用多重继承时防止给定类的多个“实例”出现在继承层次结构中的方法。

考虑以下场景:

class A { public: void Foo() {} };
class B : public A {};
class C : public A {};
class D : public B, public C {};

上面的类层次结构导致“可怕的钻石”看起来像这样:

  A
/ \
B C
\ /
D

D 的一个实例将由包含 A 的 B 和还包含 A 的 C 组成。所以你有两个 A 的“实例”(为了更好的表达)。

当您遇到这种情况时,您可能会产生歧义。当你这样做时会发生什么:

D d;
d.Foo(); // is this B's Foo() or C's Foo() ??

虚拟继承可以解决这个问题。当您在继承类时指定 virtual 时,您是在告诉编译器您只需要一个实例。

class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};

这意味着层次结构中只包含一个 A 的“实例”。因此

D d;
d.Foo(); // no longer ambiguous

这是一个小总结。欲了解更多信息,请阅读 thisthis .一个很好的例子也可用here .

关于c++ - 在 C++ 中,什么是虚拟基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558/

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