採取這種簡單的代碼:在基礎中使用抽象期望它是派生類?
class A{
public:
virtual void foo() = 0;
void x(){ foo(); }
};
class B: public A{ foo(){ ... } };
main(){
B b;
b.x();
}
我要的是建立一個抽象類,將有會調用一個函數期待它在派生類中
的問題是,實現的功能我似乎無法完成這項工作,編譯器稱它無法編譯,因爲它無法找到引用(或類似的內容)到foo()以在基類的x()中執行。這可以工作嗎?任何人都可以給我一個這樣的例子嗎?
編輯:它似乎只是不工作時,「foo();」在A級(基礎級)的破壞者之內......
它讓我感到困惑。 = [
EDIT2:這有多有趣。我剛剛創建了一個callfoo(){foo(); }現在它編譯好了,但如果我試圖直接從基類A的析構函數中調用純抽象函數,它會給我錯誤......怪異。任何人都有這個想法嗎? O_o
對此有任何幫助嗎?
感謝,
喬納森
更新
它的工作的析構函數之外。現在我只是感到困惑。
嘗試把「富()」的A(基地)類的析構函數裏面,至少對我來說不是編譯...
任何幫助PLZ?
在哪裏的問題? – 2010-04-05 00:14:46
我會回到這裏接受任何關於這個問題的答案,如果我做錯了或不是,我正在使用gcc 4.3.2在vmware內的一個Linux機器中...感謝所有答案,到目前爲止,我喜歡這個網站非常多... – Jonathan 2010-04-05 00:45:56
這是關於效率。只有在構建B對象的A部分時,才能創建和銷燬對象的最有效方法是對B本身一無所知(因此不能稱之爲方法)。 – baol 2010-04-05 00:54:45