很多學c++的人,對於如何理解其多型性,相信都挺模糊的,我也是其中乙個。現在,我感覺我對這個理解有了更深一層的理解,現在寫出來,和大家一起分享,如果有錯,請大家不吝賜教。
如果沒有虛函式【也就是virtual宣告的函式】,那麼c++的多型性就無法解釋了,所以說,虛函式使c++具有了多型性!
在我們用到的類中,有乙個最頂層的基類,然後由這個基類派生或者被繼承出很多派生類,就好像一顆倒立的大樹,下面是乙個我從網上找過來的例子,我認為很能解釋這個問題:
class a }; class b: public a }; 那麼,在使用的時候,我們可以: a * a = new b(); a->foo(); // 在這裡,a雖然是指向a的指標,但是被呼叫的函式(foo)卻是b的!
class a是基類,class b是繼承class a 的乙個派生類。怎麼體現多型性呢?也就是,我宣告乙個基類的指標:a,但是當我使這個指標指向其派生類時,呼叫的派生類的virtual void foo() 函式,而不是基類的。這也就體現了,在同一類族中,不同類之間對同一訊息的不同反應,這就是多型性
c++虛函式和多型性的關係【virtual】之二
C 多型性和虛函式
c 的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同 舉個例子,比如 移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動 這就是多型性 多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享 還能共享介面。非靜態函式宣告的前面加上v...
C 虛函式和多型性
c 為了實現多型性,提供了靜態繫結 早 或者叫做編譯期繫結 和動態繫結 晚 兩種機制。靜態繫結中包括 1 函式過載 2 運算子過載 3 子類繼承父類時,父類中的函式沒有新增virtual關鍵字 非虛函式 父類指標指向子類的位址時,呼叫和父類同名的函式則會預設呼叫父類的同名函式,子類同名函式的不會被呼...
c 多型性 虛函式
c 中多型性是指通過用virtual關鍵字來繫結同名同引數的函式,實現在編譯中進行後繫結,即在編譯過程中不繫結類,在執行時與具體的物件進行繫結,這樣就可以動態地與實際聯絡 比如乙個類 animal 有乙個虛函式breath 魚類 fish 也有函式breath 狗類 dog 函式breath 具體呼...