虛函數 vs 純虛函數 vs 靜態函數(C++)

🧩 一圖看懂:虛函數 vs 純虛函數

特性虛函數(Virtual)純虛函數(Pure Virtual)
語法virtual void foo();virtual void foo() = 0;
是否必須實現? 必須在類中實現? 不在基類實現,派生類必須實現
是否可被重寫? 可重寫(override)? 必須被重寫(override)
用途支持運行時多態,可選重寫強制派生類必須重寫,實現接口規范
是否構成抽象類? 不一定? 是抽象類,不能實例化

? 虛函數(virtual

  • 語法virtual void speak();

  • 作用:支持 運行時多態

  • 特性

    • 有默認實現

    • 可以被子類覆蓋

    • 必須是非靜態成員函數

  • 使用場景:需要在子類中覆蓋行為(但不是強制)


? 純虛函數(= 0

  • 語法virtual void speak() = 0;

  • 作用:創建接口函數,強制子類必須實現

  • 特性

    • 沒有默認實現

    • 子類 必須重寫,否則也是抽象類

    • 所在類稱為 抽象類不能被實例化

  • 用途:面向接口編程、設計規范

class Animal {

public:

? ? virtual void speak() = 0; // 純虛函數

};


? 靜態成員函數(static

  • 屬于類本身,而不是對象

  • ? 不能是虛函數,因為沒有 this 指針

  • 無法訪問非靜態成員(因為不依賴對象)

class A {

public:

??static void sayHello(); // 和對象無關

};


🧠 三、抽象類(包含純虛函數的類)

  • 語法:類中至少一個函數是 virtual void foo() = 0;

  • 特點

    • 不能被實例化

    • 派生類必須實現純虛函數,才可以實例化

    • 通常作為接口使用,規范子類的行為


📌 四、虛函數工作原理:虛函數表(vtable)

  • 編譯器為類創建一張虛函數表

  • 對象內部有個隱藏指針指向這個表(vptr)

  • 當你調用虛函數時,實際會通過 vtable 找到正確的函數地址 ? 實現多態

🔑 小結:口訣記憶版

項目口訣
const 指針左定值,右定向,const 修飾不變量
虛函數支持多態,可選覆蓋
純虛函數沒有實現,強制子類實現,是接口
抽象類有純虛函數,不可實例化,只能繼承
靜態函數類級函數,不能訪問對象成員,不能是虛函數
多態原則通過指針/引用訪問虛函數,才會發生運行時多態
析構函數如果類有虛函數,析構函數也應為虛函數,防止內存泄漏

詳情請見:C++ 虛函數和純虛函數的區別 | 菜鳥教程

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

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

相關文章

2025年滲透測試面試題總結-拷打題庫36(題目+回答)

網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 2025年滲透測試面試題總結-拷打題庫36 PHP代碼常見入口函數查找 PHP框架路由方法熟悉度 PHP變量覆蓋…

STL之vector容器

vector的介紹 1.vector是可變大小數組的容器 2.像數組一樣,采用連續的空間存儲,也就意味著可以通過下標去訪問,但它的大小可以動態改變 3.每次的插入都要開空間嗎?開空間就要意味著先開臨時空間,然后在拷貝舊的到新…

[學成在線]22-自動部署項目

自動部署 實戰流程 下邊使用jenkins實現CI/CD的流程。 1、將代碼使用Git托管 2、在jenkins創建任務,從Git拉取代碼。 3、拉取代碼后進行自動構建:測試、打包、部署。 首先將代碼打成鏡像包上傳到docker私服。 自動創建容器、啟動容器。 4、當有代…

74HC123的電路應用場景

74HC123的電路應用場景 **1. 引腳功能示例****2. 核心功能****(1)單穩態觸發器****(2)雙獨立通道****(3)靈活觸發方式** **3. 工作原理****4. 典型應用場景****(1)定時與延時控制***…

【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析與防護實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大語言模型(LLM)的廣泛應用,其安全性問題日益凸顯。DeepSeek作為中國領先的開源AI模型,以低成本和高性能著稱,但近期暴露的數據庫…

《ESP32音頻開發實戰:I2S協議解析與WAV音頻錄制/播放全指南》

前言 在智能硬件和物聯網應用中,音頻處理能力正成為越來越重要的功能——無論是語音交互、環境音采集,還是音樂播放,都離不開高效的音頻數據傳輸與處理。而I2S(Inter-IC Sound)作為專為音頻設計的通信協議&#xff0c…

大數據實時數倉的數據質量監控解決方案

實時數倉不僅僅是傳統數據倉庫的升級版,它更強調數據的實時性、流動性和高可用性,通過對海量數據的即時處理和分析,為企業提供近乎實時的洞察力。這種能力在金融、零售、制造、互聯網等行業中尤為關鍵,例如,電商平臺可以通過實時數倉監控用戶行為,動態調整推薦算法;金融…

56認知干貨:智能化產業

如果在不久的未來,一座高樓大廈的建設,只需將圖紙輸入系統,無數臺機器人就能精準協作完成任務; 電影節的主角不再是人類,動漫與影視作品將不再需要人類創作; 當播種和收獲的工作無人參與,所有過程都能自動化進行; 這將預示著我們將迎來一個智能化社會,在這個社會中,…

使用synchronized關鍵字同步Java線程

問題 在Java多線程編程中,你需要保護某些數據,防止多個線程同時訪問導致數據不一致或程序錯誤。 解決方案 在需要保護的方法或代碼段上使用synchronized關鍵字。 討論 synchronized關鍵字是Java提供的同步機制,用于確保在同一時刻只有一…

MATLAB基于格拉姆角場與2DCNN-BiGRU的軸承故障診斷模型

本博客來源于CSDN機器魚,未同意任何人轉載。 更多內容,歡迎點擊本專欄目錄,查看更多內容。 目錄 0 引言 1 格拉姆角場原理 2 2DCNN-BiGRU網絡結構 3 應用實例 3.1 數據準備 3.2 格拉姆角場數據提取 3.3 網絡模型搭建-重中之重 3.4 …

電氣設備器件選型參數---斷路器

斷路器 一、基本電氣參數 額定電壓(Ue) 必須≥系統最高工作電壓(如380V、660V等)。 注意直流/交流系統的區別,直流斷路器需專門設計。 額定電流(In) 根據負載的持續工作電流選擇,…

Linux常用命令30——groupadd創建新的用戶組

在使用Linux或macOS日常開發中,熟悉一些基本的命令有助于提高工作效率,groupadd命令的功能是創建新的用戶組。每個用戶在創建時都有一個與其同名的基本組,后期可以使用groupadd命令創建出新的用戶組信息,讓多個用戶加入指定的擴展…

微信小程序 自定義組件 標簽管理

環境 小程序環境: 微信開發者工具:RC 1.06.2503281 win32-x64 基礎運行庫:3.8.1 概述 基礎功能 標簽增刪改查:支持添加/刪除單個標簽、批量刪除、重置默認標簽 數據展示:通過對話框展示結構化數據并支持復制 動…

wpf CommandParameter 傳遞MouseWheelEventArgs參數 ,用 MvvmLight 實現

在 WPF 中使用 MVVM Light 框架傳遞 MouseWheelEventArgs 參數至 CommandParameter,可通過以下步驟實現: ?1. XAML 中配置事件綁定? 在控件上通過 EventToCommand 綁定鼠標滾輪事件,并啟用 PassEventArgsToCommand 屬性以傳遞事件參數: <!-- 命名空間聲明 --> x…

vmware diffy配置ollama 本機ip無法訪問

防火墻直接關閉 本地測試&#xff0c;給它直接關了 ollama配置 vim /etc/systemd/system/ollama.service這是的配置 [Unit] DescriptionOllama Service Afternetwork-online.target[Service] Environment"OLLAMA_HOST0.0.0.0:11434" #Environment"OLLAMA_OR…

React--》掌握react構建拖拽交互的技巧

在這篇文章中將深入探討如何使用react-dnd&#xff0c;從基礎的拖拽操作到更復雜的自定義功能帶你一步步走向實現流暢、可控且用戶友好的拖拽體驗,無論你是剛接觸拖拽功能的初學者還是想要精細化拖拽交互的經驗開發者&#xff0c;都能從中找到適合自己的靈感和解決方案。 目錄 …

數據結構與算法:回溯

回溯 先給出一些leetcode算法題&#xff0c;以后遇見了相關題目再往上增加 主要參考代碼隨想錄 2.1、組合問題 關于去重&#xff1a;兩種寫法的性能分析 需要注意的是&#xff1a;使用set去重的版本相對于used數組的版本效率都要低很多&#xff0c;大家在leetcode上提交&#x…

iview 分頁改變每頁條數時請求兩次問題

問題 在iview page分頁的時候&#xff0c;修改每頁條數時&#xff0c;會發出兩次請求。 iview 版本是4.0.0 原因 iview 的分頁在調用on-page-size-change之前會調用on-Change。默認會先調用on-Change回到第一頁&#xff0c;再調用on-page-size-change改變分頁顯示數量 此時就會…

一周學會Pandas2 Python數據處理與分析-Pandas2復雜數據查詢操作

鋒哥原創的Pandas2 Python數據處理與分析 視頻教程&#xff1a; 2025版 Pandas2 Python數據處理與分析 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 前面我們學了.loc[]等幾個簡單的數據篩選操作&#xff0c;但實際業務需求往 往需要按照一定的條件甚至復雜的組合條件…

【Vue bug】:deep()失效

vue 組件中使用了 element-plus 組件 <template><el-dialog:model-value"visible":title"title":width"width px":before-close"onClose"><div class"container" :style"{height:height px}"&g…