多型的簡單理解

2021-10-06 23:42:53 字數 1166 閱讀 8893

所謂多型(polymorphism),按字面的意思就是「多種狀態」。在物件導向語言中,介面的多種不同的實現方式即為多型。引用charlie calverts對多型的描述——多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作(摘自「delphi4 程式設計技術內幕」)。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。多型性在object pascal和c++中都是通過虛函式(virtual function) 實現的。

c++中,實現多型有以下方法:虛函式,抽象類,覆蓋,模板(過載和多型無關)。 c++為了讓乙個類成為抽象類,至少必須有乙個純虛函式(加上個 = 0)。包含至少乙個純虛函式的類視為抽象類。

class l
更多虛函式和純虛函式的解釋見:

注意的是,函式過載不叫做,其是對應不同的傳入引數,乙個物件同一名稱的函式功能不同。

1、c++中,在呼叫過載函式時,能夠根據引數的型別及個數來找到確定的函式。然而,這一過程是通過編譯來完成的,也就是說,程式中尋找過載函式具體位址的工作是在程式編譯過程中完成的,程式一旦編譯完成,所有函式、方法等(包括過載函式、方法)的呼叫位址都已明確。

2、c++中,多型是執行時特徵,也就是說,程式實現多型是在程式執行的過程中來實現的。這一過程通常是針對虛擬類或方法來的,即在程式執行過程中動態的確定虛擬類或方法的位址,從而實現具體的類或方法的呼叫。

3、、實現多型輸入,無非是希望程式在執行過程中,自動區分輸入內容的資料型別,此後程式根據具體的資料型別來呼叫相應的方法。由上述2所述,c++程式不具備針對變數的多型特性。因此,如果要實現這類「多型」,仍舊是程式設計師的職責,即程式設計師在**中來實現輸入的內容的具體資料型別。

對於沒被定義為虛函式的物件,其在引用時不會根據實際傳入的物件判斷應該使用什麼函式,而是編譯器預設向上使用基類的函式(這裡類似於下面的例子,這種情況下,輸出的為基類的base).

class base 

};class son : public base

};void fun(base b)

void main()

下面是對析構函式進行多型的實現。

多型簡單理解

constdataset cn new constdataset 基類變數指向基類物件 constdataset st new specifictest 基類變數指向子類物件呼叫非虛方法 執行呼叫方法的變數型別對應的方法,如果沒有找到,則往上回溯,查詢基類中有無對應的方法 直到object,若找不到...

java多型的簡單理解

多型 某乙個 物件 事物在不同時刻表現出來的不同狀態 舉例 1.貓可以是貓的型別,貓 m new 貓 2.同時貓也是動物的一種 也可以把貓稱為動物 動物 d new 貓 再舉乙個例子 水在不同時刻的狀態 水 液體,固體,氣態 多型的前提 1,要有繼承關係 2.要有方法重寫 其實沒有也是可以的,但是如...

多型的理解

1.對多型的理解 同乙個物件在不同時刻體現出來的不同狀態。簡單來說就是貓和狗都是動物,但他們又有許多不同,貓和狗是動物向下延伸的不同結果,這就是多型。2.多型的前提 a 有繼承或者實現關係。b 有方法重寫。c 有父類或者父介面引用指向子類物件。3.多型的分類 a 具體類多型 class fu cla...