1 虛擬的輸入輸出
1. 第一次引入虛擬函數的基類,必須在類聲明中指定virtual關鍵字。如果定義被放在類的外面則不用再次指定關鍵字virtual。
2. 引入虛擬函數的類必須定義它,或者把它聲明為純虛擬函數。
3. 為了使虛擬函數的派生類實例能夠改寫其基類的活動實例,它的原型必須與基類完全匹配。包括參數、返回值、const性等等。
a) 但派生類實例的返回值,可以是基類實例返回類型的公有派生類類型。
2 純虛擬函數
C++語言為提供了一種語法結,構通過它可以指明一個虛擬函數,只是提供了一個可被子類型改寫的接口,但是它本身并不能通過虛擬機制被調用,這就是純虛擬函數。純虛擬函數的聲明如下所示:
virtual 返回值 FunctionNmae(參數) = 0;
包含或繼承一個或多個純虛擬函數的類被編譯器識別為抽象基類,試圖創建一個抽象基類的獨立類對象會導致編譯時刻錯誤。
抽象基類只能作為子對象出現在后續的派生類中,不能聲明抽象基類的對象,但是可以聲明抽象類的指針。
3 虛擬函數的靜態調用
當用類域操作符調用虛擬函數時,我們改變了虛擬機制,使得虛擬函數在編譯時刻被靜態解析。改變虛擬機制常常是為了效率,在一個派生類虛擬函數中,有時需要調用基類的實例來完成”已經在基類和派生類實例之間被抽取出來“的操作。
純虛擬函數可以通過虛擬機制被調用,也可以被靜態調用。
4 虛擬函數和缺省實參
如果一個虛函數在基類提供了一個缺省的參數值,而在派生類中提供了另外一個缺省的參數值,這時候的調用會出現問題,如果用的是基類的指針或者引用調用,則使用的是基類的缺省參數,否則才是派生類的缺省參數。這是因為缺省實參不是在運行時刻決定的,而是在編譯時刻根據被調用函數的對象的類型決定的。
遇到這樣的問題可以通過把缺省實參作為用戶是夠提供實參的標志,而在內部用局部變量作為真正的參數。
posted on 2009-03-27 10:37
chatler 閱讀(213)
評論(0) 編輯 收藏 引用 所屬分類:
C++_BASIS