c 虛函式的用法

2021-10-11 19:32:51 字數 1406 閱讀 5427

基類定義虛函式,派生類重定義虛函式(即所謂的覆蓋

建立派生類物件

基類的指標指向派生類物件

基類指標呼叫虛函式。

即使是使用」this->虛函式名「的形式來呼叫,編譯器仍將其解釋為靜態聯編的"本類名::虛函式名",即它們所呼叫的虛函式是自己類中定義的,如果自己類中沒有實現該函式,則呼叫基類中的虛函式,但一定不會呼叫任何派生類中重定義的虛函式。

在基類中不給出具體實現,把它宣告為純虛函式,留給它的派生類去實現。這就是純虛函式的作用。

class

base

;class

derived

public

:base

};

共有兩種形式的抽象類

1.當乙個類中包含了純虛函式,那麼這個類就變成了抽象類,抽象類只能作為基類派生新類,不能建立抽象類物件。即:

class

base

;int

main()

如果派生類沒有對虛函式進行重定義,那麼該派生類也會變成抽象類。

class

base

;class

derived

public

:base

;int

main()

2.當乙個類只定義了乙個protected型別的建構函式時,無論是在外部還是在派生類中都不能建立該類的物件,但是卻可以由它派生出新類,即只能派生新類,但不能建立自己物件的類。

class

base

;class

derived

public

:base

;int

main()

如果有乙個基類的指標指向派生類的物件,並且想通過該指標 delete 派生類物件

base * pbase =

newderived()

;delete pbase;

系統將只會執行基類的析構函式,而不會執行派生類的析構函式。為避免這種情況

的發生,往往把基類的析構函式宣告為虛的,此時,系統將先執行派生類物件的析

構函式,然後再執行基類的析構函式。

如果基類的析構函式宣告為虛的,派生類的析構函式也將自動成為虛析構函式,無

論派生類析構函式宣告中是否加virtual關鍵字。

C 虛函式和純虛函式用法

1 虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2 虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的形式呼叫,而純虛函式必須在子...

C 中的虛函式和純虛函式用法

c 中的虛函式和純虛函式用法 1.虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2.虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型...

C 中的虛函式和純虛函式用法

1 虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2 虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的形式呼叫,而純虛函式必須在子...