( 1 )在基類用 virtual 關鍵字宣告成員函式為虛函式。
這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫 。 在類
外定義虛函式時,不必再加 virtual 關鍵字。
( 2 )在派生類中重新定義此函式,要求函式名 、 函式型別 、 函式引數個數和型別全部與
基類的虛函式相同,並根據派生類的需要重新定義函式體。
c++規定,當乙個成員函式被聲 明為虛函式後,其派生類中的同名函式都自動成為虛函
數。 因此在派生類重新宣告該虛函式時,可以加 virtual 關鍵字,也可以不加,但一般習慣在
每一層宣告該函式時都加 virtual 關鍵字,使程式更加清晰 。 如果在派生類中沒有對基類的虛
函式重新定義,則派生類簡單地繼承其直接基類的虛函式 。
( 3 )定義乙個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。
通過該指標變數呼叫此虛函式,此時呼叫的就是指標變革指向的物件的同名函式。
( 4 )通過虛函式與指向基類物件的指標變數的配合使用,就能方便地呼叫同一類族中不
同類的同名函式,只要先用基類指標指向即可 。 如果指標不斷地指向同一類族中不同類的對
象,就能不斷地呼叫這些物件中的同名函式。 正如前面所說,不斷地告訴計程車司機要去的
目的地,然後司機把你送到你要去的地方 。
需要說明以下幾點: ①有時在基類中定義的非虛函式會在派生類 巾被重新定義,如果用
基類指標呼叫該成員函式,則系統會呼叫物件中基類部分的成員函式; ②如果用派生類指標
呼叫該成員函式,則系統會呼叫派生類物件中的成員函式,這並不是多型性行為(使用的是
不同型別的指標),沒有用到虛函式的功能 。
( 1 )使用虛函式時,有兩點要注意,如下所述 。
1 )只能用 virtual 關鍵宇宣告類的成員函式,使它成為虛函式,而不能將類外的普通函
數宣告為虛函式。 因為虛函式的作用是允許在派生類中對基類的虛函式重新定義 。 顯然,它
只能用於類的繼承層次結構中 。
2 ) 乙個成員函式被宣告為虛函式後,在同 一類族中的類就不能再定義乙個非 virtua l 的
但與該虛函式具有相同的引數(包括個數和型別)和函式返回值型別的同名函式。
( 2 )根據什麼考慮是否把乙個成員函式宣告為虛函式呢?主要考慮以下幾點 。
1 )首先看成員函式所在的類是否會作為基類。 然後看成員函式在類的繼承後有無可能
被更改功能,如果希望更改其功能, 一般應該將它宣告為虛函式。
2 )如果成員函式在類被繼承後的功能不需要被修改,或派生類用不到該函式,則不要
把它宣告為虛函式。 不要僅僅考慮到要作為基類而把類中的所有成員函式都宣告為虛函式。
3 )應考慮對成員函式的呼叫是通過物件名還是通過基類指標或引用去訪問,如果是通
過基類指標或引用去訪問的,則應當宣告為虛函式。
4 )有時,在定義虛函式時並不定義其函式體,即函式體是空 的 。 它的作用只是定義了
乙個虛函式名,具體功能留給派生類去新增 。
需要說明的是:使用虛函式,系統要有一定的空間開銷 。 當乙個類帶有虛函式時 i 編譯
系統會為該類構造乙個虛函式表,它是乙個指標陣列,用於存放每個虛函式的人口位址 。 系
統在進行動態關聯時的時間開銷是很少的,因此,多型是高效的 。
虛函式使用方法
虛函式的使用方法 1 在基類用virtual宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便被呼叫。在類外定義虛函式時,不必在定義virtual 2 在派生類中重新定義此函式,要求函式名,函式型別,函式引數個數和型別全部與基類的虛函式相同,並根據派 生類的需要重新...
乾貨 C 虛函式的使用方法
虛函式的作用 虛函式的使用方法 在什麼情況下應該宣告虛函式 使用虛函式時,有兩點要注意 只有類的成員函式才能被宣告虛函式,即虛函式只用於類的繼承層次結構中 乙個成員函式被宣告為虛函式後,在同一類族中的類就不能再定義乙個該虛函式同名 同型別和同引數同名非虛函式。使用虛函式,系統要有一定的額外空間開銷。...
c 中虛函式的相關使用方法
若乙個例項方法宣告前帶有virtual關鍵字,那麼這個方法就是虛方法。虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的 以後再講 虛方法的特點 虛方法前不允許有static,abstract,或override修飾符 虛方法不能是私有的,因此不能使用pri...