2012-09-05 12 views
0

可能重複:
C++: Derived + Base class implement a single interface?在基地的一個實現純虛函數在這種情況下不工作

我有以下聲明:

class iSomething 
{ 
    virtual int getData() const = 0; 
} 

class *tManager: public tTheManager 
{ 
} 

class tTheManager 
{ 
    virtual int getData() const {return 0;}; 
} 

+++++++++++++++++++++++++++++++++++++++++++++++++

class myClass: public tManager, public iSomething 
{ 
} 

編譯器抱怨myClass需要實現getData(),但myClass繼承自實現此接口的tManager!在我執行以下操作後,編譯器工作正常

class myClass: public tManager, public iSomething 
{ 
    virtual int getData() const {return tTheManager::getData();}; 
} 

任何想法爲什麼會發生這種情況? 謝謝

+2

這不會編譯。請不要發佈僞代碼或餐巾代碼。 (除了其他幾個問題,你錯過了很多分號。) –

+0

此外,這不是繼承的工作原理。 * derived *類必須實現純虛函數。 –

回答

0

tManager子類作爲getData()執行,但其他/第二iSomething子類沒有。

是否有一個原因,你是多繼承一個抽象類?

+0

是的,因爲ocde的某些部分正在使用接口iSomething來獲取實際上是指向對象的指針的數據。 我仍然不確定爲什麼編譯器出錯。 – Bassam

1

當你寫這樣

class myClass: public tManager, public iSomething 
{ 
} 

你都從實現上述功能和抽象類,沒有一個具體的類繼承。現在如果它被允許做你想做的事情,它將取決於你如何投射'myclass'的實例ptr,無論是調用具體函數getData還是通常不需要的純虛擬getData()。

它有點奇怪,因爲tManager已經實現了iSomething,所以向myClass添加iSomething並沒有真正實現任何東西。相反,您可能想重寫myClass中的getData,並以這種方式避免多重繼承。

相關問題