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