【发布时间】:2015-03-21 21:56:19
【问题描述】:
...当类确实提供了所有抽象方法的实现,但没有“正式”实现接口时?
假设我有以下内容:
class AInterface {
public:
virtual void mem_func()=0;
virtual ~AInterface(){}
};
void AFunction(AInterface* i){};
class BClass {
public:
void mem_func(){}
virtual ~BClass(){}
};
我无法更改任何内容,但我想使用 BClass 类的对象来调用 AFunction。
其实我也想写类似
class MyABClass : public BClass,public AInterface {};
但这并没有帮助(该类只是继承了这两个方法并且是抽象的)。我想这样做的一种方法是写类似
class MyABClass : public AInterface {
public:
void mem_func(){a.mem_func();}
private:
BClass a;
}
这很好,但我想知道是否可以节省一些写作,或者是否有更好的方法来处理这种情况。
【问题讨论】:
-
您想要实现什么,或者这只是对 C++ 中 OOP 的一般探索?看起来您正在尝试实现 Mixins,但我不太确定。
-
为什么不只是
class MyClass : public AClass {}? -
我不认为你可以随心所欲。假设 AInterface::A() 不是纯虚拟的,当你调用 MyClass::A() 时编译器不知道要调用哪一个。如果 AInterface::A() 是纯虚函数,编译器需要先找到 A()。
-
@πάνταῥεῖ AInterface 是纯抽象的(否则我不会称它为“接口”:P)。但是,即使不是,我也不太理解您的评论。但是,我将不得不看一下,如果我不明白,那将是一个不同的问题。
-
@MorphingDragon 也许使用 mixins,可以更优雅地处理这种情况,但我的问题实际上是关于(从某个地方)给出 AInterface、AFunction 和 AClass 而不能直接更改它们中的任何一个。实际上,我正在考虑编写一个可以将任何类作为参数的模板,并通过简单地将调用转发到模板参数类调用来实现 AInterface。我想这会朝着 mixins 的方向发展。
标签: c++ oop abstract-class multiple-inheritance