C 基礎 多型

2021-07-03 04:28:07 字數 2114 閱讀 6341

多型:為了程式的可擴充套件性,開放封閉原則 (對修改封閉,對擴充套件開放)

多型就是指不同物件收到相同訊息時,會產生不同的行為,同乙個類在不同的場合下表現出不同的行為特徵。

多型的作用:把不同的子類物件都當做父類來看,可以遮蔽不同子類物件之間的差異性,寫出通用的**,做出通用的程式設計,已以適應需求的不斷變化。

實現多型的方法:

1)、虛方法 是有意義的 呼叫子類重寫的方法之前會呼叫 父類的虛方法。

步驟:1、將父類的方法標記為虛方法 ,使用關鍵字 virtual,這個函式可以被子類重新寫乙個遍。子類加乙個override

2)、抽象類

當父類中的方法不知道如何去實現的時候,可以考慮將父類寫成抽象類,將方法寫成抽象方法。

父類和父類的方法abstaact  子類的方法重寫父類的抽象方法  抽象方法沒有方法體 有大括號就叫做有方法體,大括號沒有內容叫空實現。

父類的抽象方法存在的意義  就是在於讓子類的方法重寫。

3)、介面

不能例項化的   介面  抽象類  靜態類

什麼時候用抽象類    多個類中  如果能抽象出乙個父類 父類中有子類共有的方法並且不知道如何寫這個方法  

什麼時候用虛方法    多個類中  如果能抽象出乙個父類 父類中有子類共有的方法並且知道如何寫這個方法  還要例項化父類物件

什麼時候用介面      多個類中  找不出乙個父類  並且多個類有共同的方法或能力    比如 鳥跟飛機  

黎克特制替換原則:

1)父類引用指向子類物件person p = new chinese()    (隱式型別轉換)

2)父類物件不能夠替換子類物件  chinese ch = (chinese) new person()  這是錯誤的

is-a可以用來驗證繼承關係是否合理  (can do驗證實現介面是否合理)

if(obj   is  型別a)  //obj是父類型別物件,型別a 是子類物件

關鍵字 as(型別轉換)(通常型別轉換之前需要通過is來判斷一下型別)

如果轉換成功則將結果賦值給

cn變數,

//如果轉換失敗也不報錯,會將

null

值賦值給

cn;

//

最好在轉換後,加乙個

cn是否為

null

的驗證。

chinese

cn = peras

chinese

;

if

(cn!=null

)

//如果轉換失敗會報錯!!!

chinese

cn1 = (

chinese

)per;

class program

//另外一種型別轉換,以下使用as的這種資料型別轉換如果轉換成功則把轉換後的結果賦值給c變數,如果轉換失敗則給c變數賦值乙個null值。即便轉換失敗也不會報異常。

american c = p as american;//推薦使用這種方式。

console.writeline("ok");

console.readkey();}}

class person

class chinese : person

class american : person

class hebeiren : chinese

class shijiazhuangren : hebeiren

class qinhuangdaoren : hebeiren

class jialifuniyaren : american

C 基礎 多型

多型 分類 編譯時多型 早繫結 overload 函式和運算子過載 執行時多型 晚繫結 override 繼承與虛函式 虛函式表 虛函式表是乙個儲存類成員函式指標的資料結構 虛函式表是由編譯器自動生成和維護的 virtual 函式會被編譯器放入虛函式表中 存在虛函式時,每個物件當中都有乙個指向虛函式...

C 基礎之多型

多型分為靜態多型和動態多型。靜態多型分為函式過載和泛型程式設計。動態多型是通過虛函式來實現的。靜態多型 叫靜態繫結或早繫結 編譯器在編譯期間完成的,編譯器可以根據函式實參的型別 可能會進行隱式的型別轉換 注意 巨集不是靜態多型,巨集是在預處理階段完成的動態多型 又叫動態繫結或者晚繫結 在程式執行期間...

c 基礎之 多型

c 物件導向的三大特徵 虛函式 是在基類中使用關鍵字 virtual 宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。多型是由虛函式實現的,而虛函式主要是通過...