在 C++ 中将 class 声明为 "final : public virtual" 有用吗?
Is declaring a class in C++ as "final : public virtual" EVER useful?
当将 c++ class 声明为 final 时,是否需要使用虚拟继承来继承基础 classes?我知道什么是虚拟继承,并用它来避免成员重复。
举个例子,如果我有这些 class 定义(假设它们都有一些成员和虚拟解构函数)
class B : public virtual A {};
class C : public virtual A {};
class D : public virtual C {};
将下一个 class 定义为
是否有意义
class E final : public virtual D {}
或
class F final : public virtual B, public virtual C {};
或者是默认继承,即
class E final : public D {}
class F final : public B, public C {};
总是够吗?
这已经困扰我很长时间了,正如我不时看到的代码,其中包括
"final : public virtual"
在 any 的情况下 virtual
可以安全地省略吗?
非常感谢hints/explanations
struct A { void foo() { cout << "foo" << endl; } };
struct B : virtual A {};
struct D final : virtual A, B {};
D d;
d.foo();
在 A
调用 foo
之前没有 virtual
会产生歧义。
当将 c++ class 声明为 final 时,是否需要使用虚拟继承来继承基础 classes?我知道什么是虚拟继承,并用它来避免成员重复。
举个例子,如果我有这些 class 定义(假设它们都有一些成员和虚拟解构函数)
class B : public virtual A {};
class C : public virtual A {};
class D : public virtual C {};
将下一个 class 定义为
是否有意义class E final : public virtual D {}
或
class F final : public virtual B, public virtual C {};
或者是默认继承,即
class E final : public D {}
class F final : public B, public C {};
总是够吗?
这已经困扰我很长时间了,正如我不时看到的代码,其中包括
"final : public virtual"
在 any 的情况下 virtual
可以安全地省略吗?
非常感谢hints/explanations
struct A { void foo() { cout << "foo" << endl; } };
struct B : virtual A {};
struct D final : virtual A, B {};
D d;
d.foo();
在 A
调用 foo
之前没有 virtual
会产生歧义。