子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...
前言
本章節主要針對于C++中的虛函數和多態做一個詳細介紹。
虛函數
虛函數的長相其實很簡單,在C++類型用virtual修飾的函數就是虛函數,如下代碼:
虛函數對于本類的影響:存在虛函數類的內存會多四個字節,如下測試代碼:
不過無論有多少個虛函數,內存只會多4個字節,因為所有虛函數都是用一個指針去存儲的,即就是所謂的虛函數指針,虛函數指針(virtual function pointer)從本質上來說就只是一個指向函數的指針,與普通的指針并無區別。它指向用戶所定義的虛函數,具體是在子類里的實現,當子類調用虛函數的時候,實際上是通過調用該虛函數指針從而找到接口。
抽象類
具有純虛函數的類我們稱之為抽象類,而純虛函數就是沒有函數體的函數,它也是一個特殊的虛函數,形態如下: virtual 函數返回值類型 函數名(參數)=0,抽象類不能創建對象,但是可以創建對象指針,如下代碼:
抽象類一般充當ADT過程,也就是抽象數據類型使用,以及在設計模式中充當中間交互層。
虛函數和多態
多態按字面的意思就是多種形態。當類之間存在層次結構,并且類之間是通過繼承關聯時,就會用到多態。C++ 多態意味著調用成員函數時,會根據調用函數的對象的類型來執行不同的函數。其實對于多態的基本概念不需要背下來,只要你知道那個對象或者指針調用哪個成員基本上就行。
如一下代碼:
1.正常情況下
就是本類對象初始化本類指針,本類對象或者之指針調用本類的成員,無論是父類還是子類就是就近原則。
2.非正常情況下
父類對象初始化子類對象,一般是不允許這樣的操作的,這里不做概述,子類對象初始化父類指針,要看父類是否存在virtual,如果不存在,以指針類型為主,如果存在virtual就以對象為主。如一下測試代碼:
關于多態的實現,不妨自行看看虛函數表的內容,我相信有很多博客文章都有講解,這里不做詳細概述。
虛析構函數
虛析構函數也就是使用virtual修飾的虛函數,為了能夠防止子類對象初始化父類指針過程中的所引發的析構問題,我們常常會把父類的析構函數寫成虛析構函數。如下測試代碼:
如果你將父類的析構函數改為虛析構函數,子類和父類的析構函數將都可以被調用有興趣的可以去試試哦。
希望對大家有幫助!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習:
點擊領取C/C++編程學習資料?jq.qq.com分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習軟件分享:
編程學習視頻分享:
總結
以上是生活随笔為你收集整理的子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python异常处理机制的好处_浅谈Py
- 下一篇: 完全二叉树最小深度_树与二叉树递归c++