你可以两次继承同一个班吗?例如:
class Base {
};
class Foo : public Base {
};
class Bar : public Base {
};
class Baz : public Foo, public Bar {
//is this legal?
// are there restrictions on Base
// (e.g. only virtual methods or a virtual base)?
};
Run Code Online (Sandbox Code Playgroud)
gha*_*.st 10
是的,这是合法的,没有任何限制Base.
但是,您应该知道这会导致两个不同类型的对象Base存在Baz,这将要求您Base在尝试访问其成员时使用限定名称来告诉C++ 您的版本.
C++提供了一种称为虚拟继承的机制来解决这个问题(如果它是一个问题):
class Base { };
class Foo : public virtual Base { };
class Bar : public virtual Base { };
class Baz : public Foo, public Bar { };
Run Code Online (Sandbox Code Playgroud)
这将共享内部和对象Base之间的对象FooBarBaz