多型與過載區別

2021-08-30 08:37:50 字數 486 閱讀 6063

多型是基於對抽象方法的覆蓋來實現的,用統一的對外介面來完成不同的功能。過載也是用統一的對外介面

來完成不同的功能。那麼兩者有什麼區別呢?

過載,是指允許存在多個同名方法,而這些方法的引數不同。過載的實現是:編譯器根據方法不同的參數列

,對同名方法的名稱做修飾。對於編譯器而言,這些同名方法就成了不同的方法。它們的呼叫位址在編譯期

就繫結了。

多型:是指子類重新定義父類的虛方法(virtual,abstract)。當子類重新定義了父類的虛方法後,父類根據

賦給它的不同的子類,動態呼叫屬於子類的該方法,這樣的方法呼叫在編譯期間是無法確定的。

不難看出,兩者的區別在於編譯器何時去尋找所要呼叫的具體方法,對於過載而言,在方法呼叫之前,編譯

器就已經確定了所要呼叫的方法,這稱為「早繫結」或「靜態繫結」;而對於多型,只有等到方法呼叫的那一刻

,編譯器才會確定所要呼叫的具體方法,這稱為「晚繫結」或「動態繫結」。 

原文: 

C 過載與多型的區別

過載 有兩個或多個函式名相同的函式,但是函式的形參列表不同。在呼叫相同函式名的函式時,根據形參列表確定到底該呼叫哪乙個函式。多型 在基類中定義了乙個虛函式,然後在派生類中又定義乙個同名,同參數列的函式,這就是多型。多型是這3種情況中唯一採用動態繫結技術的一種情況。也就是說,通過乙個基類指標來操作物件...

多型,過載,覆蓋區別與聯絡

覆蓋 在基類中定義了乙個非虛函式,然後在派生類中又定義了乙個同名同引數同返回型別的函式,這就是覆蓋了。過載 有兩個或多個函式名相同的函式,但是函式的形參列表不同。在呼叫相同函式名的函式時,根據形參列表確定到底該呼叫哪乙個函式。多型 在基類中定義了乙個虛函式,然後在派生類中又定義乙個同名,同參數列的函...

區別多型和過載

過載可認為是靜態的多型,靜態聯編,發生在編譯階段 多型是動態的,動態聯編,發生在執行階段 靜態的比動態的效率高,但動態的最大優點是多型性,提高 復用性。1 實現多型公有繼承有兩種機制 第一種是 在派生類中重新定義基類方法。重新定義的方法和基類中的方法完全一致。即,函式名一致,函式的返回值型別一致,引...