你可以两次继承同一个班吗?

cha*_*m15 7 c++

你可以两次继承同一个班吗?例如:

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