struct I {
virtual void foo() = 0;
virtual void bar() = 0;
};
struct A {
void foo(){};
};
struct B: public A, public I {
void bar(){};
};
这个伪代码应该在C ++中有效吗?目前,我在链接时收到foo()
未定义的引用错误。
如果这不起作用,请推荐一种创建接口的技术,该接口通过继承实现,如示例所示。
答案 0 :(得分:6)
这取决于你的意思"有效"。您必须添加缺少的返回类型,并修复一些其他语法问题,以便进行编译。
如果你的意思是,"是B
一个非抽象类,它正确地覆盖了在I
?"中声明的两个纯虚函数,那么没有。它不会覆盖foo
;继承同名函数不算作重写。
如果您希望A::foo
成为I::foo
的实现,那么您必须在B
中添加包装以提供覆盖:
void foo() {A::foo();} // assuming the missing return type is void
答案 1 :(得分:-1)