c++ 虚表
轉載:https://www.cnblogs.com/hushpa/p/5707475.html
轉載:https://blog.csdn.net/haoel/article/details/1948051/
-------------------------------------------------------
虛表和虛指針都是建立在類的基礎上而言的
1.虛表屬于類,虛指針屬于類對象
1)虛表屬于類,而不屬于類對象
一個類可以創建若干個對象,每個對象都有一個虛指針,但是所有對象的虛表只有一個
2)虛指針屬于類對象
類是沒有虛指針這個概念的,只有類創建的對象才有虛指針
3)虛表在編譯期就建立好了,而虛指針是在類對象的構造函數中被初始化
2.虛表的繼承
若父類是含有虛表,那么子類也含有虛表,只是子類的虛表是繼承于父類,或者說子類與父類共享一張虛表
1)單繼承
父類含有虛函數,那么單繼承后,含有公共函數的部分,虛表中對應的函數的地址就會變成子類的函數的地址
2)多繼承
多個父類都有虛函數,那么多繼承后,子類按照繼承順序含有多張虛表,每個虛表中含有公共函數的部分,地址都將變成子類函數的地址
具體虛表分布圖:C++虛函數表分析(轉載:https://www.cnblogs.com/hushpa/p/5707475.html)
3.如何訪問虛表中的函數
訪問原理:虛表存放在類對象的地址的開頭前4個字節,虛表的本質是函數指針數組,每個指針也占4個字節
訪問方法: C++ 虛函數表解析(轉載:https://blog.csdn.net/haoel/article/details/1948051/)
總結
- 上一篇: VB对象及其属性、事件和方法
- 下一篇: 运用BFS算法实现北京地铁路线换乘系统