除了繼承外,c++的另乙個優良特性是支援多型,即允許將派生類的物件當作基類的物件使用。如果a是基類,b和c是a的派生類,多態函式test的引數是a的指標。那麼test函式可以引用a、b、c的物件。示例程式如下:
class a
;
void test(a *a)
class b : public a
;
class c : public a
;
// example
main()
;
以上程式看不出「多型」有什麼價值,加上虛函式和抽象基類後,「多型」的威力就顯示出來了。
c++用關鍵字virtual來宣告乙個函式為虛函式,派生類的虛函式將覆蓋(override)基類對應的虛函式的功能。示例程式如下:
class a
};
void test(a *a)
class b : public a
};
class c : public a
};
// example
main()
;
如果基類a定義如下:
class a
;
那麼函式func1叫作純虛函式,含有純虛函式的類叫作抽象基類。抽象基類只管定義純虛函式的形式,具體的功能由派生類實現。
結合「抽象基類」和「多型」有如下突出優點:
(1)應用程式不必為每乙個派生類編寫功能呼叫,只需要對抽象基類進行處理即可。這一招叫「以不變應萬變」,可以大大提高程式的可復用性(這是介面設計的復用,而不是**實現的復用)。
(2)派生類的功能可以被基類指標引用,這叫向後相容,可以提高程式的可擴充性和可維護性。以前寫的程式可以被將來寫的程式呼叫不足為奇,但是將來寫的程式可以被以前寫的程式呼叫那可了不起。
虛函式 和 純虛函式
簡單的說,介面 就是該類的public函式。由於在類的外部一般只能通過這些公共函式才能訪問乙個類,所以這些函式就稱為類的介面。雖然乙個類也可以存在public成員資料,但是,一般不要編寫這種能夠直接在類的外部訪問的public資料,因為這樣就使資訊隱藏性受到一定的 破壞 當使用乙個基類的指標指向其乙...
純虛函式和虛函式
首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...
虛函式和純虛函式
一 定義 都有virtual關鍵字 乙個函式為虛函式,該函式可以實現,允許用基類的指標呼叫子類的同名函式。乙個函式為純虛函式,該函式不能實現,子類繼承這個類必須實現這個函式才能例項化物件。class a class b void main 二 用法 有純虛函式的類是抽象類,不能生成物件,只能派生。他...