抽象類與純虛函數

          1、啥是抽象類?c++

含有純虛函數的類被稱爲抽象類。抽象類是一種特殊的類,它是爲了抽象和設計的目的而創建的,它處於繼承結構的上層。抽象類是不能定義對象的,在實際中爲了強調一個類是抽象類,可將該類的構造函數說明爲受保護的訪問控制權限。函數

抽象類的主要做用就是描述一組相關子類的通用操做接口。通常而言,抽象類只描述這組子類共同的操做接口,而實現交給子類來完成。工具

抽象類只能做爲基類來使用,其純虛函數的實現由派生類給出。若是派生類沒有從新定義純虛函數,而派生類只是繼承基類的純虛函數,則這個派生類仍然仍是一個抽象類。若是派生類中給出了基類純虛函數的實現,則該派生類就再也不是抽象類了,它就能夠建立該類的實例了。spa

舉個例子來講,好比咱們設計了一個交通工具的抽象類。顯而易見的,由交通工具類能夠派生出汽車類,飛機類等具有具體特性的類。可是對於基類交通工具來講,它的特性倒是模糊的,普遍的,此時創建一個交通工具類的對象是沒有任何實際意義的,對於這種沒有必要創建對象的類進行約束,c++引入了抽象類的特性,而抽象類的約束控制來自於純虛函數。設計


2、啥是純虛函數?對象

      1定義繼承

純虛函數是在基類中聲明的虛函數,它在基類中沒有定義,但要求任何派生類都要定義本身的實現方法。在基類中實現純虛函數的方法是在函數原型後加「=0」接口

virtual void funtion()=0原型

虛函數的定義是:virtual void funtion()編譯器

2引入緣由:

1、爲了方便使用多態特性,咱們經常須要在基類中定義虛函數。

2、但在不少狀況下,基類自己生成對象是不合情理的。例如,動物做爲一個基類能夠派生出老虎、孔雀等子類,但動物自己生成對象明顯不合常理。

爲了解決上述問題,引入了純虛函數的概念,將函數定義爲純虛函數,則編譯器要求在派生類中必須予以重載以實現多態性。同時含有純虛擬函數的類稱爲抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。

      3若是一個類中含有純虛函數,那麼任何試圖對該類進行實例化的語句都將致使錯誤

        的產生,由於抽象基類是不能被直接調用的。必須被子類繼承重載之後,根據要求

        調用其子類的方法。

      4在子類中必定要實現純虛函數的定義,否則編譯時會出錯。



          


相關文章
相關標籤/搜索