我想在C++中使用抽象類定義接口類型,並用具體類實現它們。我遇到的問題是我不能從另一個接口繼承和接口,並從基礎具體類繼承實現。在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](http://stackoverflow.com/questions/4605556/when-virtual-inheritance-is-a-good-design/4606206#4606206) – 2012-02-22 23:33:20