考虑以下层次结构:
class Interface {
public:
virtual void foo() = 0;
};
class SubInterface: public Interface {
public:
virtual void bar() = 0;
};
class Base: public Interface {
public:
void foo() {};
};
class Impl: public SubInterface, public Base {
public:
void bar() {};
};
- 除了 foo() 之外,还有几个子接口提供其他方法。
- 一个子接口可以有多个实现类。
- foo() 总是以同样的方式实现。
这是一个模拟如何使用这些类的示例:
int main() {
SubInterface* view1 = new Impl(); // Error! Interface::foo() is pure virtual within Impl
view1->foo();
view1->bar();
Interface* view2 = view1;
view2->foo();
}
为什么编译器看不到继承自Interface::foo()
的实现?Base
Impl
我想我可以显式地实现foo()
并将Impl
调用委托给Base
这样的:
class Impl: public SubInterface, public Base {
public:
void foo() {
Base::foo();
}
void bar() {};
};
但是,我必须对所有实现子接口的类都这样做,所以这种方式并不完全理想。有更好的解决方案吗?