C++ C++;:如何在具有基类的父接口中实现函数?
考虑以下层次结构:C++ C++;:如何在具有基类的父接口中实现函数?,c++,oop,inheritance,interface,C++,Oop,Inheritance,Interface,考虑以下层次结构: 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 B
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
继承自该库
我想我可以在Impl
中显式地实现foo()
,并将调用委托给Base
,如下所示:
class Impl: public SubInterface, public Base {
public:
void foo() {
Base::foo();
}
void bar() {};
};
但是,对于实现子接口的所有类,我都必须这样做,所以这种方式并不理想。有更好的解决方案吗?
子接口
和基
应该实际上继承自接口
,否则会以
基本上,Impl包含两个接口的“实例”。以下是原因-按照图:
哦,我真希望这是可能的。@Travis:你什么意思?当然有可能…@eladian:如果他能将虚拟继承添加到
基
和子接口
,这是有可能的……我想这个问题还不清楚:-)啊。当我试图解决这个问题时,我读过关于虚拟继承的书,但是我把Impl
inheritInterface
虚拟化了,结果搞砸了。谢谢我喜欢的IDE仍然认为Impl
是抽象的,但它在gcc中工作。实际上,是虚拟继承创建了菱形。如果没有虚拟继承,你会得到一棵树。你能把它转换成ASCII码吗?我的眼睛不允许我。