天天看點

抽象類

如果聲明了一個類,一般可以用它定義對象。但是在面向對象程式設計中,往往有一些類,它們不用來生成對象。定義這些類的惟一目的是用它作為基類去建立派生類。它們作為一種基本類型提供給使用者,使用者在這個基礎上根據自己的需要定義出功能各異的派生類。用這些派生類去建立對象。

一個優秀的軟體工作者在開發一個大的軟體時,決不會從頭到尾都由自己編寫程式代碼,他會充分利用已有資源(例如類庫)作為自己工作的基礎。

這種不用來定義對象而隻作為一種基本類型用作繼承的類,稱為抽象類(abstract class),由于它常用作基類,通常稱為抽象基類(abstract base class)。

凡是包含純虛函數的類都是抽象類。因為純虛函數是不能被調用的,包含純虛函數的類是無法建立對象的。抽象類的作用是作為一個類族的共同基類,或者說,為一個類族提供一個公共接口。

一個類層次結構中當然也可不包含任何抽象類,每一層次的類都是實際可用的,可以用來建立對象的。但是,許多好的面向對象的系統,其層次結構的頂部是一個抽象類,甚至頂部有好幾層都是抽象類。

如果在抽象類所派生出的新類中對基類的所有純虛函數進行了定義,那麼這些函數就被賦予了功能,可以被調用。這個派生類就不是抽象類,而是可以用來定義對象的具體類(concrete class)。如果在派生類中沒有對所有純虛函數進行定義,則此派生類仍然是抽象類,不能用來定義對象。

雖然抽象類不能定義對象(或者說抽象類不能執行個體化),但是可以定義指向抽象類資料的指針變量。當派生類成為具體類之後,就可以用這種指針指向派生類對象,然後通過該指針調用虛函數,實作多态性的操作。

繼續閱讀