1.虛擬函數與一般函數區別:
定義:
虛擬函數在編譯期間是不被靜態編譯的,它的相對地址是不確定的,它會根據運行 時期對象實例來動態判斷要調用的函數,其中那個申明時定義的類叫申明類,那個執行時實例化的類叫實例類。一般函數在編譯時就靜態地編譯到了執行文件中,其 相對地址在程序運行期間是不發生變化的,也就是寫死了的。
執行順序:
當調用一個對象的函數時,系統會直接去檢查這個對象 申明定義的類,即申明類,看所調用的函數是否為虛函數;如果不是虛函數,那么它就直接執行該函數。而如果有virtual關鍵字,也就是一個虛函數,那么 這個時候它就不會立刻執行該函數了,而是轉去檢查對象的實例類,是否重新實現了該虛函數,如果重新實現,它就不會再找了,而馬上執行該實例類中這個重新實 現的函數。如果沒有,系統就會不停地往上找實例類,並對父類重復剛才在實例類里的檢查,知道找到第一個重裝了該虛函數的父類為止,然后執行該父類里重裝后 的函數。
2.抽象類
定義:
不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它並且能創建它們的實例。抽象類能夠被用於類,方法,屬性,索引器和事件,使用abstract在一個類聲明中表示該類是抽象類,由其派生類實現。抽象類不能被封閉。
3.抽象函數
定義:
抽象方法必須聲明在抽象類中。聲明抽象方法時,不能使用virtual、static、private修飾符。在抽象類中抽象方法不提供實現。抽象方法不包含方法主體,必須由派生類以override方式實現此方法。
4.接口
接口的聲明采用如下格式:
修飾符 interface 接口名稱:繼承的接口列表
{ 接口內容;}
一個接口可以從一個或多個基接口繼承。
