虛擬函式 純虛擬函式
首先:強調一個概念
定義一個函式為虛擬函式,不代表函式為不被實現的函式。
定義他為虛擬函式是為了允許用基類的指標來呼叫子類的這個函式。
定義一個函式為純虛擬函式,才代表函式沒有被實現。
定義純虛擬函式是為了實現一個介面,起到一個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。
作者:wuxinliulei
連結:https://www.zhihu.com/question/23971699/answer/69592611
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
https://blog.csdn.net/Ferlan/article/details/82856536
子類如果不提供虛擬函式的實現,那就會自動呼叫基類的預設方案。而子類如果不提供純虛擬函式的實現,則編譯將會失敗。
基類提供的純虛擬函式實現版本,無法通過指向子類物件的基類型別指標或引用來呼叫,因此不能作為子類相應虛擬函式的備選方案
用一個基類型別的指標或者引用,來指向子類物件,進而呼叫經由子類複寫了的個性化的虛擬函式,這是C++實現多型性的一個最經典的場景。
純虛擬函式在基類中的實現跟多型性無關,它只是提供了一種語法上的便利,在變化多端的應用場景中留有後路。
第五,虛擬函式和普通的函式實際上是儲存在不同的區域的,虛擬函式所在的區域是可被覆蓋(也稱複寫override)的,每當子類定義相同名稱的虛擬函式時就將原來基類的版本給覆蓋了,另一側面也說明了為什麼基類中宣告的虛擬函式在後代類中不需要另加宣告一律自動為虛擬函式,因為它所儲存的位置不會發生改變。而普通函式的儲存區域不會覆蓋,每個類都有自己獨立的區域互不相干。
相關文章
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 虛擬函式,虛擬函式表函式
- C++ 介面(純虛擬函式)C++函式
- 抽象基類和純虛擬函式抽象函式
- [Lang] 虛擬函式函式
- 【C++筆記】虛擬函式(從虛擬函式表來解析)C++筆記函式
- 【C++筆記】虛擬函式(從虛擬函式概念來解析)C++筆記函式
- 基類指標、虛純虛擬函式、多型性、虛析構指標函式多型
- c++虛擬函式表C++函式
- 虛擬函式與多型函式多型
- 虛擬函式的呼叫原理函式
- C++純虛擬函式簡介及區別C++函式
- 021--C++養成之路(純虛擬函式和純抽象類)C++函式抽象
- 虛擬函式的實現原理函式
- C++ 虛擬函式表解析C++函式
- 深入C++成員函式及虛擬函式表C++函式
- C++多型之虛擬函式C++多型函式
- 內聯(inline)函式與虛擬函式(virtual)的討論inline函式
- C++虛擬函式學習總結C++函式
- C++之類解構函式為什麼是虛擬函式C++函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 虛擬函式的記憶體佈局(上)函式記憶體
- 關於虛擬函式的一些理解函式
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承
- Java常見知識點彙總(④)——虛擬函式、抽象函式、抽象類、介面Java函式抽象
- c++虛擬函式實現計算表示式子C++函式
- C++物件導向總結——虛指標與虛擬函式表C++物件指標函式
- setV:一個管理 Python 虛擬環境的 Bash 函式Python函式
- 詳解C++中的多型和虛擬函式C++多型函式
- 虛擬函式表-C++多型的實現原理函式C++多型
- 避免對派生的非虛擬函式進行重定義函式
- C++(虛擬函式實現多型基本原理)C++函式多型
- __cxa_pure_virtual報錯(g++編譯虛擬函式時)編譯函式
- 基類指標,子類指標,虛擬函式,override與final指標函式IDE
- pytorch擬合sin函式PyTorch函式
- C++單繼承、多繼承情況下的虛擬函式表分析C++繼承函式
- <<從0到1學C++>> 第7篇 多型性和虛擬函式C++多型函式
- kvm純命令建立虛擬機器虛擬機