1. 程式人生 > >C++之虛擬函式

C++之虛擬函式

虛擬函式的實質和用途:如果不定義虛擬函式,基類和擴充套件類中不能有同名函式(名字,引數個數順序型別都相同),否則會發生同名覆蓋,此時想用基類指標去呼叫擴充套件類的物件是行不通的;但如果將基類的成員函式定時成虛擬函式,相當於允許擴充套件類中重新定義該同名函式執行不同的功能,此時就可以用基類的指標去指向擴充套件類,從而呼叫擴充套件類的成員函式,從而實現與用基類指標指向基類、呼叫基類同名函式不同的功能即實現了多型。

一個函式是否定義成虛擬函式的依據:1 虛擬函式所在的類有可能被派生類繼承 2函式的功能在派生類中有可能改寫3 通過基類指標呼叫派生類的物件。

系統只所以能區分基類指標呼叫的成員函式是基類的還是擴充套件類的,是因為在執行中根據基類指標指向的物件不同來識別的,內部會增加一個指標陣列形式的指標陣列(指向同名虛擬函式的入口地址)

,增加了一部分的開銷。純虛擬函式在基類中沒有定義實體,只是建立一個框架,等待擴充套件類來實現。