C 之虛函式

2022-06-17 17:54:12 字數 860 閱讀 1680

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

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

系統只所以能區分基類指標呼叫的成員函式是基類的還是擴充套件類的,是因為在執行中根據基類指標指向的物件不同來識別的,內部會增加乙個指標陣列形式的指標陣列(指向同名虛函式的入口位址),增加了一部分的開銷。純虛函式在基類中沒有定義實體,只是建立乙個框架,等待擴充套件類來實現。

虛析構函式:

如果用基類指標指向乙個new 擴充套件類,在delet 基類指標時只會呼叫基類的析構函式而不會呼叫擴充套件類的析構,所以常將基類的析構函式定義成虛函式即虛析構函式,這樣delete時才能正確的先呼叫擴充套件類的析構再呼叫基類的析構函式。

純虛函式:

1 定義:在宣告虛函式時初始化為0的函式。形式vitual 函式名()=0;

2 =0不是說返回值為0而是告訴系統這是乙個純虛函式。

3純虛函式沒有函式體不能被呼叫,只能被擴充套件類改寫

4除非擴充套件類中再次將基類的純虛函式定義成純虛函式,否則純虛函式在擴充套件類中將不在純虛即可以用來定義實體物件了

抽象類的特點:

1包含純虛函式的類被稱為抽象類,抽象類不是對基礎物件的抽象,所以不能定義實體,

2 抽象類一般位於系統的頂層。抽象類是本類族的公共介面包含了共同屬性,但通過基類指標呼叫時又呈現不同的多型。

C 之虛函式

若乙個例項方法宣告前帶有virtual關鍵字,那麼這個方法就是虛方法。虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的 以後再講 虛方法的特點 虛方法前不允許有static,abstract,或override修飾符 虛方法不能是私有的,因此不能使用pri...

C 之虛函式

引入原因 為了方便使用多型特性,我們常常需要在基類中定義虛函式。class cman void move private class cchild public cman private cman m man cchild m child cman p 虛函式的使用精髓,如果不定義基類的指標去使用,...

c 之虛函式

靜態聯編也叫做早繫結,函式名與其在記憶體中的可執行 之間的對應關係在編譯時就已經確定了 動態聯編也叫做晚繫結,是之成員函式的呼叫語句在編譯時不知道要執行哪個記憶體位址的 成員函式的呼叫會根據目標物件的動態型別在程式執行時將函式名繫結到具體的函式上 靜態聯編舉例 class shape 執行上面的 後...