c++ - 是否可以通过继承来实现一个接口(interface)?

标签 c++ inheritance polymorphism

struct I { 
      virtual void foo() = 0; 
      virtual void bar() = 0;
};

struct A { 
        void foo(){};
 };
struct B: public A, public I {

     void bar(){};
};

这个伪代码应该在 C++ 中有效吗?目前,我在链接时收到 foo() 的 undefined reference 错误。

如果这不起作用,请推荐一种创建接口(interface)的技术,该接口(interface)通过继承实现,如示例中所示。

最佳答案

这取决于您所说的“有效”是什么意思。您必须添加缺少的返回类型,并可能修复一些其他语法问题,才能使其编译。

如果你的意思是,“B 是一个非抽象类,它正确地覆盖了 I 中声明的两个纯虚函数吗?”,那么不是。它不会覆盖 foo ;继承同名函数不算重写。

如果你想要A::foo待执行I::foo , 那么你必须在 B 中添加一个包装器提供覆盖:

void foo() {A::foo();}  // assuming the missing return type is void

关于c++ - 是否可以通过继承来实现一个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105089/

相关文章:

c++ - 是否可以拥有来自同一基类的不同对象的数组?

c++ - &地址是什么意思

c++ - 从基类指针获取对两个具有不同类型的派生成员变量的访问。

c++ - 教 child C++ 时使用 "include stdafx.h"?

java - 当使用组合而不是继承时,Comparator<T> 的替代方案是什么?

java - 为什么不能降低 Java 子类中方法的可见性?

c++ - 为什么以下 CRTP 层次结构无法编译?

C++ 嵌套宏?

scala - 为什么 Option 不继承自 Seq 和 Set?

perl - 正确的 Perl OO 继承