C:使用基类作为接口的实现

新手上路,请多包涵

在 C++ 中是否可以使用另一个基类在派生类中提供接口(即抽象基类)的实现?

 class Base
{
    virtual void myfunction() {/*...*/};
}
class Interface
{
    virtual void myfunction() = 0;
}
class Derived
    : public Base, public Interface
{
    // myfunction is implemented by base
}

上面应该编译,但实际上并不工作。有什么办法可以达到这个效果吗?

万一有人关心,想要这样做的原因是(对于我的应用程序)使用来自另一个项目/命名空间的通用库来在我的项目中提供接口的实现是有意义的。我可以包装所有东西,但这似乎是很多额外的开销。

谢谢。

原文由 deuberger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

如果 Base 不是从 Interface 派生的,那么您必须在 Derived 中进行转发呼叫。在您必须编写额外代码的意义上,这只是“开销”。我怀疑优化器会让它像你最初的想法一样有效。

 class Interface {
    public:
        virtual void myfunction() = 0;
};

class Base {
    public:
        virtual void myfunction() {/*...*/}
};

class Derived : public Interface, public Base {
    public:
        void myfunction() { Base::myfunction(); }  // forwarding call
};

int main() {
   Derived d;
   d.myfunction();
   return 0;
}

原文由 Adrian McCarthy 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这个:

 class Interface
{
    virtual void myfunction() = 0;
}
class Base : public Interface
{
    virtual void myfunction() {/*...*/};
}
class Derived
    : public Base
{
    // myfunction is implemented by base
}

原文由 amuliar 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题