函式過載,是一種多型現象,通過命名傾軋在編譯階段決定,故稱為靜多型。
動多型,不是在編譯器階段決定,而是在執行階段決定,故稱為動多型。動多型形成的條件如下:
1,父類中有虛函式。
2,子類override(覆寫)父類中的虛函式。
3,將子類物件位址賦給父類的指標,並發生虛函式呼叫。(如果不用指標,用引用必須一開始必須繫結乙個,而且一經確定,引用無法改)
virtual void func(); //宣告型關鍵字
對比之前的過載和shadow
overload過載 同一作用域中,函式名相同,引數列表不同
shadow 發生在父子類中的同名成員
override 發生在父子類中,父類中函式含有 virtual 宣告的函式
子類中,同參、同名、同返回的函式,構成覆寫
ps:覆寫的函式是否一定同父類的訪問方式一樣(public,private,protected),看子類的需求。
例子:
class shape
virtual void draw();
protected:
int _x,_y;
};void shape::draw()
小結:1,在基類中用virual宣告成員函式為虛函式。類外實現虛函式時,不必再加virtual.
2,在派生類中重新定義此函式稱為覆寫,要求函式名,返值型別,函式引數個數及型別全部匹配。並根據派生類的需要重新定義函式體。
3,當乙個成員函式被宣告為虛函式後,其派生類中完全相同的函式(顯示的寫出)也為虛函式。可以在其前加virtual以示清晰。
4,定義乙個指基類物件的指標,並使其指向其子類的物件,通過該指標呼叫虛函式,此時呼叫的就是指標變數指向物件的同名函式。
5,子類中的覆寫的函式,可以為任意訪問型別,依子類需求決定。
C 多型性 什麼是多型
下面舉乙個生活的例子來理解多型。如果要求3種人 孩子,運動員,演奏者都執行乙個動作 play 會發生什麼情況呢?孩子會出去玩耍。運動員會比賽。演員開始演奏。對於同乙個命令,不同的人會有不同的反應,執行不同的動作,這就是生活中乙個多型。在程式設計中,對於同乙個方法,由於執行的物件不同,方法的內容也就不...
C 什麼是多型,多型的用途
qq群 807236138 群稱 ios 技術交流學習群 1 定義 乙個介面,多種方法 程式在執行時才決定呼叫的函式。2.實現 c 多型性主要是通過虛函式實現的,虛函式允許子類重寫override 注意和overload的區別,overload是過載,是允許同名函式的表現,這些函式引數列表 型別不同...
C 多型性 什麼是多型
下面舉乙個生活的例子來理解多型。如果要求3種人 孩子,運動員,演奏者都執行乙個動作 play 會發生什麼情況呢?孩子會出去玩耍。運動員會比賽。演員開始演奏。對於同乙個命令,不同的人會有不同的反應,執行不同的動作,這就是生活中乙個多型。在程式設計中,對於同乙個方法,由於執行的物件不同,方法的內容也就不...