為什麼含有純虛函式的類,不能定義類物件?
先從反面來講:如果含有純虛函式的類可以定義物件,那麼該物件就應該可以呼叫類中的純虛函式,但是純虛函式是沒有實現的,這就是個矛盾的。
正面來講:普通類具有成員函式,構造類的物件時,會對成員變數和成員函式分配記憶體。含有純虛函式的類,定義了成員函式的位址是空,無法分配記憶體,該成員函式對類是沒有意義的,失去了普通類的資料和方法繫結於同一物件中的意義,因此無法構造物件,只能通過派生類繼承這些成員函式並實現,才能構造派生類物件。此時抽象類就起到了定義介面的作用。
抽象類將事物的描述和實現區分開來,選擇純虛函式的概念,是想將乙個類宣告為抽象類的思想明確化,選擇性的定義函式
是一種靈活的多的方式,是實現多型的基礎。
為什麼建構函式不能為虛函式
1,從儲存空間角度 虛函式對應乙個vtable,這大家都知道,可是這個vtable其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函式。2,從使用角度 虛函式主要用...
建構函式為什麼不能是虛函式
1.從儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找vtable呢?所以建構函式不能是虛函式。...
為什麼建構函式不能為虛函式
1,從儲存空間角度 虛函式對應乙個vtable,這大家都知道,可是這個vtable其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函式。2,從使用角度 虛函式主要用...