基類定義虛函式,派生類重定義虛函式(即所謂的覆蓋)
建立派生類物件
基類的指標指向派生類物件
基類指標呼叫虛函式。
即使是使用」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 過載以後以多型的形式呼叫,而純虛函式必須在子...