在我的課的設計,我遇到了以下問題:抽象基類益智
class MyData
{
int foo;
};
class AbstraktA
{
public:
virtual void A() = 0;
};
class AbstraktB : public AbstraktA
{
public:
virtual void B() = 0;
};
template<class T>
class ImplA : public AbstraktA
{
public:
void A(){ cout << "ImplA A()"; }
};
class ImplB : public ImplA<MyData>, public AbstraktB
{
public:
void B(){ cout << "ImplB B()"; }
};
void TestAbstrakt()
{
AbstraktB *b = (AbstraktB *) new ImplB;
b->A();
b->B();
};
上面的代碼的問題是,編譯器會抱怨AbstraktA :: A()沒有定義。
接口A被多個對象共享。但是A的實現依賴於模板參數。界面B是外界所見,需要抽象化。
我想這樣做的原因是,它會允許我這樣定義對象C: 定義C接口從巴丁格A. 繼承使用不同的數據類型的模板A.定義執行C
我希望我很清楚。有沒有辦法做到這一點,還是我需要重新考慮我的設計?
我可能是愚蠢的,但爲什麼「抽象」拼寫「抽象」。那是故意的嗎? – 2010-03-16 10:20:18
嘿,沒有理由。只是我的母語的結果:) – 2010-03-16 10:46:03
可能的重複:http://stackoverflow.com/questions/254673/multiple-inheritance-from-two-derived-classes – Talvalin 2010-03-16 10:55:29