继承的类可以覆盖另一个继承的类的虚函数吗?

时间:2014-05-01 00:18:53

标签: c++ inheritance

以下是否合法?

class Base {
    virtual void foo() = 0;
};

class Fooable {
    void foo(){}
};

class Child : public Base, public Fooable {

};

如果一个类继承自两个都有foo()的类,会发生什么?如果Base::foo()不抽象怎么办?

2 个答案:

答案 0 :(得分:2)

由于foo在Base中是虚拟的,如果你没有在Child中实现foo(),那么如果你试图实例化Child,编译就会失败,因为Child仍然是抽象的。

如果Base :: foo()不是抽象的,你需要指定你调用的foo,如下所示: Child *child = new Child; child->Base::foo(); child->Fooable::foo()

答案 1 :(得分:0)

由于BaseFooable没有评论虚拟基础,当您从这两个版本继承时,您将获得两个独立的foo函数,尽管它们具有同名。

您可以使用常见的虚拟基类来执行您想要的操作:

class Base {
    virtual void foo() = 0;
};

class Fooable : public virtual Base {
    void foo(){}
};

class Child : public virtual Base, public virtual Fooable {

};

虽然如果您希望能够拨打foo,您需要将其设为公开而非私密。