虛擬函式 純虛擬函式
首先:強調一個概念
定義一個函式為虛擬函式,不代表函式為不被實現的函式。
定義他為虛擬函式是為了允許用基類的指標來呼叫子類的這個函式。
定義一個函式為純虛擬函式,才代表函式沒有被實現。
定義純虛擬函式是為了實現一個介面,起到一個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。
作者:wuxinliulei
連結:https://www.zhihu.com/question/23971699/answer/69592611
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
https://blog.csdn.net/Ferlan/article/details/82856536
子類如果不提供虛擬函式的實現,那就會自動呼叫基類的預設方案。而子類如果不提供純虛擬函式的實現,則編譯將會失敗。
基類提供的純虛擬函式實現版本,無法通過指向子類物件的基類型別指標或引用來呼叫,因此不能作為子類相應虛擬函式的備選方案
用一個基類型別的指標或者引用,來指向子類物件,進而呼叫經由子類複寫了的個性化的虛擬函式,這是C++實現多型性的一個最經典的場景。
純虛擬函式在基類中的實現跟多型性無關,它只是提供了一種語法上的便利,在變化多端的應用場景中留有後路。
第五,虛擬函式和普通的函式實際上是儲存在不同的區域的,虛擬函式所在的區域是可被覆蓋(也稱複寫override)的,每當子類定義相同名稱的虛擬函式時就將原來基類的版本給覆蓋了,另一側面也說明了為什麼基類中宣告的虛擬函式在後代類中不需要另加宣告一律自動為虛擬函式,因為它所儲存的位置不會發生改變。而普通函式的儲存區域不會覆蓋,每個類都有自己獨立的區域互不相干。
相關文章
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 虛擬函式,虛擬函式表函式
- C++中抽象類、虛擬函式和純虛擬函式C++抽象函式
- C++ 介面(純虛擬函式)C++函式
- 虛擬函式函式
- 抽象基類和純虛擬函式抽象函式
- [Lang] 虛擬函式函式
- C++中的虛擬函式與虛擬函式表 (轉)C++函式
- C++:純虛擬函式與抽象類C++函式抽象
- 【C++筆記】虛擬函式(從虛擬函式表來解析)C++筆記函式
- 【C++筆記】虛擬函式(從虛擬函式概念來解析)C++筆記函式
- C++ 虛擬函式C++函式
- C++虛擬函式C++函式
- 虛擬函式釋義函式
- 解除心頭的困惑--純虛擬函式 (轉)函式
- 基類指標、虛純虛擬函式、多型性、虛析構指標函式多型
- 虛解構函式(√)、純虛解構函式(√)、虛建構函式(X)函式
- C++純虛擬函式簡介及區別C++函式
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- c++虛擬函式表C++函式
- 虛擬函式的呼叫原理函式
- C++虛擬函式bugC++函式
- 虛擬函式與多型函式多型
- 虛擬函式的實現原理函式
- C++ 中的虛擬函式C++函式
- C++ 虛擬函式表剖析C++函式
- const修飾虛擬函式函式
- 虛擬函式實現原理(轉)函式
- [CareerCup] 13.3 Virtual Functions 虛擬函式Function函式
- C++ 虛擬函式表解析C++函式
- C++多型(上)——虛擬函式、虛表C++多型函式
- 深入C++成員函式及虛擬函式表C++函式
- C++箴言:避免解構函式呼叫虛擬函式C++箴言函式
- 021--C++養成之路(純虛擬函式和純抽象類)C++函式抽象
- C++繼承三之純虛擬函式pure virtual functionC++繼承函式Function
- 我對C++中虛擬函式、純虛擬函式在實現多型中作用的一點淺薄認識 (轉)C++函式多型
- C++多型之虛擬函式C++多型函式
- C++中虛擬函式的作用C++函式