C 虛函式和純虛函式理解

2021-10-13 09:57:43 字數 905 閱讀 3798

虛函式:函式中帶有關鍵字virtual

純虛函式:純虛函式是在基類中申明為虛函式,它在基類中沒有定義, 但是要求任何派生類都需要定義自己的實現方法,在基類的實現純虛函式的方法是在函式原型後新增=0(virtual void funtion1()=0)

虛函式的過載函式然然為虛函式, 在派生類中重定義虛函式時必須完全和基類完全相同。 

虛函式必須為類的成員函式,不能為全域性函式,也不能為靜態函式。不能將友員函式說明為虛函式,但是虛函式可以是另乙個類的友員。

虛構函式可以是虛函式,但是建構函式不能為虛函式。一般的講,如果類中定義有虛函式,則其析構函式也應該宣告為虛函式,特別是在析構函式中需要完成一些有意義的操作,比如釋放記憶體時,尤其應當如此。 在類系統中訪問乙個虛函式時,應使用指向基類型別的指標或對基類型別的引用,以滿足執行時多型性的需求,當然也可以像呼叫普通成員函式一樣來呼叫乙個函式,若在派生類中沒有重新定義虛函式,則該類的物件將使用其基類中的虛函式**

抽象類定義:如果乙個類中至少有乙個純虛函式,那麼這個類就被稱為抽象類。 

抽象類不僅包括純虛函式,也可以包含虛函式。抽象類中純虛函式可能是在抽象類中定義的,也可能是從基類繼承的下來且重定義的。

派生類中必須過載基類中的純虛函式,否則它仍然是乙個抽象類。

從基類繼承類的純虛函式,在派生類中仍然是虛函式

抽象類的乙個重要特點:抽象類只能用作派生類的基類,而不能直接建立物件例項。

原因:其中乙個或多個函式沒有定義,但仍可使用指向抽象類的指標支援執行時多型性。

虛函式表:虛函式是通過一張虛函式表來實現的。簡稱v-table,在這個表中,主要是乙個類的虛函式的位址表,這張表解決了繼承、覆蓋的問題,保證其真實反映實際的函式。在有虛函式的類的例項中這個表被分配在了這個例項的記憶體中,所有,當我們用父類指標來操作乙個子類的時候,這張虛函式表就顯得無比重要了,其指明了實際所應該呼叫的函式

虛析構函式 純虛析構函式 理解

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生 部分不會被銷毀。...

c 虛函式和純虛函式

虛函式 定義 在基類中用virtual宣告,不一定不被實現,可以用基類的指標來呼叫子類的對應函式,實現成員函式的動態過載。子類virtual可寫可不寫,編譯器自動加上。1.以下繼承後的print 相當於重寫,兩個類print 方法輸出結果不同 class a 2.加了vitual 定義為虛函式以後,...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...