是否可以通过继承实现接口


struct I { 
      virtual void foo() = 0; 
      virtual void bar() = 0;
};
struct A { 
        void foo(){};
 };
struct B: public A, public I {
     void bar(){};
};

此伪代码在C++中是否有效?目前,我在链接时收到foo()的未定义引用错误。

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

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

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

如果您希望A::foo成为I::foo的实现,则必须在B中添加一个包装器以提供覆盖:

void foo() {A::foo();}  // assuming the missing return type is void
  1. 虚拟函数不能内联。您正在内联 A::foo() 和 B:bar()
  2. 您正在从类 B 中的两条路径继承 I。通过 A 并直接通过 I。您还需要在类 B 中提供 foo() 的实现。

最新更新