純虛函數與抽象類
純虛函數,就是沒有函數體的虛函數。什麼叫沒有函數體?就是這樣定義的函數:
virtual傳回值函數名稱(形參)=0;
可以看到,前面virtual與虛函數定義一樣,後面加了一個=0。表示沒有函數體,這就是純虛函數。包含純虛函數的類別就是抽象類,一個抽象類別至少有一個純虛函數。
抽象類別的存在是為了提供一個高度抽象、對外統一的接口,然後透過多態的特性使用各自的不同方法,是C++物件導向設計以及軟體工程的核心思想之一。
抽象類別的特點總結如下:
1. 抽象類別無法實例出一個物件來,只能作為基底類別讓衍生類別完善其中的純虛函數,然後再實例化使用。
2. 抽象類別的衍生來依然可以不完善基底類別中的純虛函數,繼續作為抽象類別被派生。直到給出所有純虛函數的定義,則成為一個具體類,才可以實例化物件。
3. 抽象類別因為抽象、無法具化,所以不能作為參數型別、回傳值、強轉型別。
4. 接著第三條,但抽象類別可以定義一個指標、引用型,指向其衍生類,來實現多型特性。