今天看設計模式,其中突然間看到純虛函式竟然被定義了,和之前看到的明顯不對啊,之前記得是純虛函式是不可以定義的,具體的定義實現只能到子類中去實現,在父類中只能宣告。結果自己程式設計發現這是可以的,瞬間打破了自定曾經的知識結構,於是查詢相關方面的知識發現:純虛函式不是不可以定義,而是沒有作用,對於含有純虛函式的抽象類,不可以例項化物件,而是對於任何乙個繼承的子類來說,必須要在子類中對該純虛函式進行定義,這又涉及到函式的覆蓋問題,可以歸屬到那一類問題中。
#include
using namespace std;
class abstractclass
~abstractclass(){}
virtual void f()=0;
};void abstractclass::f()
~class1(){}
void f();
};void class1::f()
int main()
{class1 a;
a.f();
system("pause");
return 0;
運算結果:can't believe it!
建構函式 析構函式是否可以定義為虛函式
從儲存空間角度 虛函式是通過虛函式表來實現多型的,虛函式表實際是儲存在物件的記憶體空間的。如果建構函式是虛函式,就需要通過虛函式表來呼叫,可是物件還沒有例項化,無法找到虛函式表,所以建構函式不能使虛函式 從使用角度看 虛函式的作用在於通過父類的指標或者引用來呼叫它的時候能夠變成呼叫子類的那個成員函式...
C 純虛函式定義
今天,我讀到 effective c 的第34條款,裡面竟然提到純虛函式也是可以定義的,大吃一驚,趕快開啟vs2005,自己編寫了一段 編譯執行,發現竟然真的可以!俺的 class a void a purevirtualfunc class b public a int main void 執行結...
析構函式可以是純虛函式
在某些類裡宣告純虛析構函式很方便。純虛函式將產生抽象類 不能例項化的類 即不能建立此型別的物件 有些時候,你想使乙個類成為抽象類,但剛好又沒有任何純虛函式。怎麼辦?因為抽象類是準備被用做基類的,基類必須要有乙個虛析構函式,純虛函式會產生抽象類,所以方法很簡單 在想要成為抽象類的類裡宣告乙個純虛析構函...