虛函數、抽象類、抽象函數與接口的區別


1.虛擬函數與一般函數區別:

定義:

  虛擬函數在編譯期間是不被靜態編譯的,它的相對地址是不確定的,它會根據運行 時期對象實例來動態判斷要調用的函數,其中那個申明時定義的類叫申明類,那個執行時實例化的類叫實例類。一般函數在編譯時就靜態地編譯到了執行文件中,其 相對地址在程序運行期間是不發生變化的,也就是寫死了的。

執行順序:

  當調用一個對象的函數時,系統會直接去檢查這個對象 申明定義的類,即申明類,看所調用的函數是否為虛函數;如果不是虛函數,那么它就直接執行該函數。而如果有virtual關鍵字,也就是一個虛函數,那么 這個時候它就不會立刻執行該函數了,而是轉去檢查對象的實例類,是否重新實現了該虛函數,如果重新實現,它就不會再找了,而馬上執行該實例類中這個重新實 現的函數。如果沒有,系統就會不停地往上找實例類,並對父類重復剛才在實例類里的檢查,知道找到第一個重裝了該虛函數的父類為止,然后執行該父類里重裝后 的函數。

2.抽象類

定義:

  不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它並且能創建它們的實例。抽象類能夠被用於類,方法,屬性,索引器和事件,使用abstract在一個類聲明中表示該類是抽象類,由其派生類實現。抽象類不能被封閉。

3.抽象函數

定義:

抽象方法必須聲明在抽象類中。聲明抽象方法時,不能使用virtual、static、private修飾符。在抽象類中抽象方法不提供實現。抽象方法不包含方法主體,必須由派生類以override方式實現此方法。

4.接口

接口的聲明采用如下格式:

  修飾符 interface 接口名稱:繼承的接口列表
  { 接口內容;}

  

  一個接口可以從一個或多個基接口繼承。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM