在java中,我們可以定義不同的接口,然後我們可以爲具體的類實現多接口。在C++中設計ABC(抽象基類)的好習慣
// Simulate Java Interface in C++
/*
interface IOne {
void MethodOne(int i);
.... more functions
}
interface ITwo {
double MethodTwo();
... more functions
}
class ABC implements IOne, ITwo {
// implement MethodOne and MethodTwo
}
*/
在C++中,一般來講,我們應該避免多重繼承的使用,雖然多繼承確實有它在某些情況下邊緣。
class ABC {
public:
virtual void MethodOne(int /*i*/) = 0 {}
virtual double MethodTwo() = 0 {}
virtual ~ABC() = 0 {}
protected:
ABC() {} // ONLY ABC or subclass can access it
};
問題1>基於對ABC
的設計,我應該改善任何其他的東西,以使它成爲一個體面的ABC?
Question2>好的ABC
不應該包含成員變量,而應該將變量保存在子類中嗎?
問題3>正如我在評論中指出的那樣,如果ABC
必須包含太多純函數?有沒有更好的辦法?
不確定您的實際代碼是否與第一個示例代碼塊相似,但接口類中的方法聲明需要'virtual'關鍵字;只有在最初聲明爲「虛擬」後纔是可選的。 – ssube 2012-03-06 17:29:44
這是否編譯?在純虛函數中0之後的大括號是錯誤 – 2012-03-06 17:30:02
@AlessandroPezzato:這是正確的;純虛擬成員函數不能在類的主體中定義。它可以在類的定義之外定義。但是,某些編譯器(例如Visual C++,至少在Visual C++ 2010 SP1中)將會按原樣接受代碼。 – 2012-03-06 17:34:20