C 多型與虛方法

2021-07-28 14:28:45 字數 1265 閱讀 1737

**自

同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。換句話說,實際上就是同乙個型別的例項呼叫「相同」的方法,產生的結果是不同的。這裡的「相同」打上雙引號是因為這裡的相同的方法僅僅是看上去相同的方法,實際上它們呼叫的方法是不同的。

多型是基於物件繼承和黎克特制轉換的,那麼什麼叫叫作黎克特制轉換呢

//首先,我們定義兩個有繼承關係的類

public

class person

}public

class student : person

}//在main方法中例項化一下

static

void main(string argus)

//as方法是如果p物件能夠轉換成student物件,則返回student例項物件

上面的例子就把乙個子類賦值給了乙個父類,並且父類轉化成了子類,並呼叫方法

由於有了黎克特制轉換,所以所有父類出現的地方,子類都可以出現,比如引數,有的引數型別是object,而object是所有類的父類,所以可以賦值給任意值

虛方法中乙個重要的實現就是對父類方法的重寫,解釋一下重寫的概念

重寫(override):子類中為滿足自己的需要在子類中來重複定義某個方法的不同實現,需要用override關鍵字,被重寫的父類方法必須是虛方法,用的是virtual關鍵字。它的特點是(三個相同):

舉乙個例子

//首先我先定義三個有繼承關係的類,student和master類繼承於person

public

class person

}public

class student : person

}public

class master : person

}//繼承的兩個類都對父類的虛方法進行了override重寫

//我們在main方法中例項並且呼叫一下

static

void main(string args)

/*輸出結果:

我是人類

我是學生

我是班長

*/

子類賦值給了父類,當父類中裝的是子類的例項的時候,父類在呼叫方法的時候,會自動去找到對應的子類例項物件的方法,這也就實現了乙個方法實現了多種功能,也就是多種狀態,也就是多型了! 

當然這裡也可以選擇不對父類的虛方法進行重寫,如果這樣的話要呼叫子類的方法就必須是通過子類來呼叫了,父類也要強制轉換為子類才可以呼叫

實現多型的第二種方式——【抽線類實現多型】

C 多型,虛方法,抽象方法

多型 是物件導向程式設計中三大機制之一,其原理建立在 從父類繼承而來的子類可以轉換為其父類 這個規則之上,換句話說,能用父類的地方,就能用該類的子類.當從父類派生了很多子類時,由於每個子類都有其不同的 實現,所以當用父類來引用這些子類時,同樣的操作而可以表現出不同的操作結果,這就是所謂的多型.1.了...

C 虛函式與多型

1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...

c 多型與虛函式

多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示 include using namespace std class sha...