C++中的虛函數表結構框架

一.虛函數表介紹

Virtual Table虛函數表是實現多態的
每個有虛函數的類的實現,都有個指向虛函數的指針表(不管是父類還是子類)
指向虛表的指針是作為數據成員存在實例對象中
當調用虛函數時,就去查找對象的虛表中指向整頓派生類函數
虛函數表就是虛函數指針組成的一個數組
對于類的普通函數使用的是靜態綁定,發生在編譯期
對類的虛函數是動態綁定,發生在運行期
虛函數表的創建是在編譯期完成
虛函數按照其聲明的順序放置在虛表中
虛表中 如果子類額外加了虛函數,父類的虛函數在子類的虛函數前面
虛表中,子類會覆蓋父類的虛函數,子類沒有覆蓋的虛函數就沿用父類的
多重繼承時,每個父類都有自己的虛函數表,子類的虛函數地址按照聲明順序放在第一個積累的虛表最后;

二.單向繼承虛表模式

單向繼承

三.多重繼承虛表模式

多重集成

四.多重繼承并有重寫的

多重集成并重寫

五.注意:

1.父類指針是不能調用子類中未覆蓋父類的,而是自己新加的成員函數的行為都會被編譯器視為非法;
2.如果父類的虛函數是private或是protected的,但這些非public的虛函數同樣會存在于虛函數表中,所以事實上可以使用訪問虛函數表的方式來訪問這些non-public的虛函數,但這樣又是不合理的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37667.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang template HTML動態模板解析實現

使用場景: 我們希望在模板里面動態解析指定的模板文件。 這個似乎使用go語言的模板嵌套 template 可以實現,不過模板嵌套聲明里面是不支持使用變量的, 如:{{template "模板文件名" .}} 這里的"模板文件名"不…

LeetCode 2710.移除字符串中的尾隨零:模擬

【LetMeFly】2710.移除字符串中的尾隨零:模擬 力扣題目鏈接:https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/ 給你一個用字符串表示的正整數 num ,請你以字符串形式返回不含尾隨零的整數 num 。 示例 1: 輸…

Apache Kylin資源管理全指南:優化你的大數據架構

標題:Apache Kylin資源管理全指南:優化你的大數據架構 摘要 Apache Kylin是一個開源的分布式分析引擎,旨在為大規模數據集提供高性能的SQL查詢能力。在Kylin中進行有效的資源管理對于確保查詢性能和系統穩定性至關重要。本文將詳細介紹如何…

leetcode 133雙周賽 統計逆序對的數目「dp」「前綴和優化」

3193. 統計逆序對的數目 題目描述: 給定一個長度為n的二維數組 r e re re,其中 r e [ i ] [ i d i , c n t i ] re[i] [id_i, cnt_i] re[i][idi?,cnti?],求存在多少個全排列perm滿足對所有的 r e [ i ] re[i] re[i]都有 p e r m [ 0.. …

Bayes分類器設計

本篇文章是博主在人工智能等領域學習時,用于個人學習、研究或者欣賞使用,并基于博主對人工智能等領域的一些理解而記錄的學習摘錄和筆記,若有不當和侵權之處,指出后將會立即改正,還望諒解。文章分類在AI學習筆記&#…

東方博宜 OJ 1201-1300

目錄 1268:【基礎】高精度加法 1269:【基礎】高精度減法 1280:【基礎】求 2 的 n 次方 1281:【基礎】求 222222?222?2 1285:【基礎】計算 N 的階乘 1286:【基礎】高精度乘單精度 1287:【基礎】高精…

第一百三十三節 Java數據類型教程 - Java基本數據類型

Java數據類型教程 - Java基本數據類型 Java定義了八種基本類型的數據:byte,short,int,long,char,float,double和boolean。 基本類型通常被稱為簡單類型。 這些可以分為四組: Integers - 包括byte&#x…

求推薦幾款http可視化調試工具?

Postman 非常流行的API調試工具,適用于構建、測試和文檔化APIs。它支持各種HTTP方法,有強大的集合和環境管理功能,以及代碼生成能力。 BB-API 是一款旨在提升開發效率的工具,它專注于提供簡約、完全免費且功能強大的HTTP模擬請…

目標檢測算法

一、緒論 1.1 目標檢測算法的定義和背景 1.2 目標檢測算法在計算機視覺領域的重要性 二、目標檢測算法的發展歷程 2.1 傳統目標檢測算法 2.2 基于深度學習的目標檢測算法 2.3 目標檢測算法的評價指標 三、目標檢測算法的關鍵技術 3.1 區域建議網絡(RPN) 3.2 卷積神經…

springmvc快速上手

一、創建工程 1、創建maven工程&#xff0c;添加maven-archetype-webapp模版 2、添加依賴 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.co…

每日一題——Python實現PAT乙級1059 C語言競賽(舉一反三+思想解讀+逐步優化)四千字好文

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁&#xff1a;用哲學編程-CSDN博客專欄&#xff1a;每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 我的寫法 時間復雜度分析 空間復雜度分析 代碼優化建議 總結 我要更強 優化方法…

macos Darwin安裝faiss-cpu

文章目錄 macos 使用brew instll fass, 后python3.12執行引用faiss包功能出現的問題 安裝時遇到問題如下 ModuleNotFoundError Traceback (most recent call last) File ~/Src/ai/framework/langchain/.venv/lib/python3.12/site-packages/langchain_co…

Spring事務的實現

Spring事務的實現分為編程式事務和聲明式事務。 編程式事務 編程式事務管理需要開發者在代碼中顯式地調用事務管理相關的方法,如`beginTransaction()`、`commit()`和`rollback()`等。在Spring中,通常通過以下兩種方式來實現編程式事務: 使用`TransactionTemplate`,`Tran…

macOS 安裝redis

安裝Redis在macOS上通常通過Homebrew進行&#xff0c;Homebrew是macOS上一個流行的包管理器。以下是安裝Redis的步驟&#xff1a; 一 使用Homebrew安裝Redis 1、安裝Homebrew&#xff08;如果尚未安裝&#xff09;&#xff1a; 打開終端&#xff08;Terminal&#xff09;并執…

.NET周刊【6月第4期 2024-06-23】

國內文章 C#.Net筑基-集合知識全解 https://www.cnblogs.com/anding/p/18229596 .Net中提供了數組、列表、字典等多種集合類型&#xff0c;分為泛型和非泛型集合。泛型集合具有更好的性能和類型安全性。集合的基礎接口包括IEnumerator、IEnumerable、ICollection、IList、ID…

Gradio 4.37.1官方教程二:Blocks

文章目錄 一、Blocks及事件監聽器1.1 Blocks結構1.2 事件監聽器的類型1.3 多數據流1.4 多輸入組件1.5 多輸出組件1.6 更新組件配置1.7 添加示例1.8 連續運行事件1.9 持續運行事件1.9.1 every參數1.9.2 load方法1.9.3 change方法 1.10 收集事件數據1.11 綁定多個觸發器到同一函數…

基于線調頻小波變換的一維時間序列時頻分析方法(MATLAB)

在機械故障診斷領域,振動信號的處理常采用以快速傅立葉變換為基礎的相關分析、幅值分析、頻譜分析等時域和頻域分析方法。但經典的FFT存在固有缺點,即它雖然在頻域范圍內是完全局部化的,但是它不包含任何時域信息,因而不適于分析非平穩信號。近年來涌現的各種時頻分析方法(短時…

【刷題】初步認識深搜(DFS)

送給大家一句話&#xff1a; 擁有希望的人&#xff0c;和漫天的星星一樣&#xff0c;是永遠不會孤獨的。 -- 《星游記》 初步認識深搜&#xff08;DFS&#xff09; dfs算法二叉樹中的深搜Leetcode 129. 求根節點到葉節點數字之和題目描述算法思路 Leetcode 814. 二叉樹剪枝題…

Redis-實戰篇-緩存更新策略(內存淘汰、超時剔除、主動更新)

文章目錄 1、緩存更新策略1.1、內存淘汰1.2、超時剔除1.3、主動更新 2、業務場景&#xff1a;3、主動更新在企業中業務實現有三種方式3.1、Cache Aside Pattern3.1.1、操作緩存和數據庫時有三個問題需要考慮&#xff1a;3.1.1.1、刪除緩存還是更新緩存&#xff1f;3.1.1.2、如何…

數據同步軟件有哪些

數據同步軟件有哪些呢&#xff1f;隨著企業規模的擴大&#xff0c;企業數據也積累得越來越多&#xff0c;萬一發生宕機風險&#xff0c;那么這個損失將不可估量。所以為了容災備用&#xff0c;我們往往需要將數據同步到另一臺備胎服務器上&#xff0c;進行冗余。 那么需要同步的…