Bar和Box是Foo的派生類,Foo具有虛函數F()和Bar和Box都具有函數F()。據我所知,多態性正確地允許Bar.F()而不是Box.F()或Box.F()而不是Bar.F()使用某些運行時例程覆蓋Foo.F()而不知道對象是否一個酒吧或一個盒子。這件事情是這樣的:C++我能正確理解多態嗎?
Foo * boxxy = new Box;
boxxy->F();
最後一行將調用正確的F()(在這種情況下,Box.F())獨立的boxxy是否是盒或酒吧或美孚(以這種情況下調用虛擬Foo.F()的實現)。
我理解這個權利嗎?如果boxxy是Box指針,會發生什麼變化?如果派生類不具有F()的覆蓋會發生什麼?最後,爲了避免爲一個基類實現一個函數,但仍然允許多態,你只需寫一個空函數體並聲明它是虛擬的?謝謝。
非常感謝。出於好奇,你可以使用NULL代替0對嗎? – 2011-04-14 15:55:43
@Brandon:不,不是在聲明純虛函數時。所需的exakt標記是'= 0',沒有別的。另外,我鼓勵你使用'0'而不是'NULL',並且當C++ 0x出現時,使用'nullptr'作爲指針。 :) – Xeo 2011-04-14 15:56:57