C 中的虛函式virtual

2021-10-20 19:20:45 字數 956 閱讀 4665

在某基類中宣告 virtual 並在乙個或多個派生類中被重新定義的成員函式稱為虛函式。

虛函式的作用就是實現多型性(polymorphism),多型性是將介面與實現進行分離。

c#作為完全物件導向語言,所有函式並不預設為virtual,但可以在基類中宣告關鍵字virtual,就可以在其派生類中通過關鍵字override重寫該函式。重寫後的virtual函式依舊是virtual函式。由於virtual只對類中的例項函式成員有意義,所以成員欄位和靜態函式都不能宣告為virtual,也不能與override和abstract一起用。

一般函式在編譯時就靜態地編譯到了執行檔案中,其相對位址在程式執行期間是不發生變化的,也就是寫死的!而虛函式在編譯期間是不被靜態編譯的,它的相對位址是不確定的,它會根據執行時期物件例項來動態判斷要呼叫的函式,其中宣告時定義的類叫宣告類,執行時例項化的類叫例項類。

1、當呼叫乙個物件的函式時,系統會直接去檢查這個物件宣告定義的類,即宣告類,看所呼叫的函式是否為虛函式。

2、如果不是虛函式,那麼它就直接執行該函式。而如果有virtual關鍵字,也就是乙個虛函式,那麼這個時候它就不會立刻執行該函式了,而是轉去檢查物件的例項類。

3、在這個例項類裡,他會檢查這個例項類的定義中是否有重新實現該虛函式(通過override關鍵字),如果有,則馬上執行該例項類中的這個重新實現的函式。而如果沒有,系統會不停地往上找例項類的父類,並對父類重複剛才在例項類裡的檢查,直到找到第乙個過載了該虛函式的父類為止,然後執行該父類裡過載後的函式。

例如:

using system;

using system.text.regularexpressions;

namespace test_code

}class b : a // 繼承

}class c : b //繼承

class d : a //繼承

}class program

}}

C 中的虛函式 virtual

在下面的程式中類derived繼承了類base class base class derived public base intmain void 第二行沒有動態繫結,呼叫函式f 這個是派生類版本的,直接輸出derived,什麼型別就是什麼型別。第三行進行了動態繫結,但是只有在呼叫虛函式的時候,動態...

C 虛函式 virtual

定義虛函式 為了指明函式為虛函式,在其返回型別前面加上保留字virtual,目的是啟用動態繫結。繼承層次的根類一般都要定義虛析構函式。成員預設為非虛函式,對非虛函式的呼叫在編譯時確定。除建構函式外,任意非static成員函式都可以是虛函式。保留字virtual只在類內部的成員函式宣告 現,不能用在類...

C 虛函式virtual!!!!!!!!!!

1.虛函式出現的作用 重寫父類的方法 2.虛函式的好處 用父類的指標指向子類的例項,呼叫子類的成員函式,這種技術可以讓父類的指標有多種形態,稱之多型。我們都知道,如果子類想用父類的 子類可以選擇繼承父類。如果普通成員函式,我作為父類,只是希望子類你能夠呼叫就好,不要修改它的功能。而父類宣告成virt...