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

Vor*_*rac 1 c++ polymorphism inheritance

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

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

     void bar(){};
};
Run Code Online (Sandbox Code Playgroud)

这个伪代码应该在C++中有效吗?目前我foo()在链接时收到未定义的引用错误.

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

Mik*_*our 6

这取决于"有效"的含义.您将不得不添加缺少的返回类型,并可能修复一些其他语法问题,以使其编译.

如果你的意思是,"是B一个非抽象类,它正确地覆盖了在...中声明的纯虚函数I",那么没有.它没有覆盖foo; 继承同名函数不算作重写.

如果你想A::foo成为实现I::foo,那么你必须添加一个包装器B来提供覆盖:

void foo() {A::foo();}  // assuming the missing return type is void
Run Code Online (Sandbox Code Playgroud)