【发布时间】:2012-02-22 23:27:01
【问题描述】:
我正在尝试使用抽象类在 C++ 中定义接口类型并使用具体类来实现它们。我遇到的问题是我不能从另一个接口继承和接口,也不能从基具体类继承实现。
我的目标是能够定义可以从不太复杂的基本接口继承的接口层次结构。我还希望能够通过从具体类继承来扩展接口的实现(例如从下面示例中的 TObjectA 继承)。
这就是我所拥有的。我得到的错误是“不允许抽象类类型“TObjectB”的对象”。我相信我知道为什么,那是因为我没有在 TObjectB 中实现 MethodA()。但我真正想要的是由基类(TObjectA)提供实现,并且仍然具有接口层次结构(IInterfaceB 继承自 IInterfaceA)。我也不想在派生的 concreate 类中重复所有继承的接口方法。我该怎么做?
class IInterfaceA
{
public:
virtual void MethodA() = 0;
};
class IInterfaceB : IInterfaceA
{
public:
virtual void MethodB() = 0;
};
class TObjectA : public IInterfaceA
{
public:
void MethodA() { cout << "Method A"; }
};
class TObjectB : public TObjectA, public IInterfaceB
{
public:
void MethodB() { cout << "Method B"; }
};
void TestInterfaces()
{
IInterfaceB* b = new TObjectB(); // error: object of abstract class type "TObjectB" is not allowed
b->MethodB();
delete b;
}
【问题讨论】:
-
您需要虚拟基类。例如。 see here
标签: c++ inheritance multiple-inheritance