将C ++中的类声明为“final:public virtual”EVER有用吗?

时间:2018-01-24 13:32:39

标签: c++ inheritance virtual final virtual-inheritance

当声明c ++类为final时,是否需要使用虚拟继承继承基类?我知道什么是虚拟继承,并使用它来避免成员重复。

作为一个例子,如果我有这些类定义(想象它们都有一些成员和虚拟解构器)

class B : public virtual A {};
class C : public virtual A {};
class D : public virtual C {};

将下一个类定义为

是否有意义
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"

任何案例中是否可以安全地省略virtual

非常感谢任何提示/解释

1 个答案:

答案 0 :(得分:1)

struct A { void foo() { cout << "foo" << endl; } };
struct B : virtual A {};
struct D final : virtual A, B {};

D d;
d.foo();

virtual之前A调用foo时不<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1.0,user-scalable=1, height = device-height" /> 将是不明确的。