C++學習細節回顧(匯總三)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
一.多態概念
同樣是動物叫的?個?為(函數),傳貓對象過去,就是”(>ω<)喵“,傳狗對象過去,就是"汪汪"。
1.根據對象不同類型,調用不同函數,這就叫做運行時多態(動態多態)
2.編譯時多態(靜態多態)主要就是我們前?講的函數重載和函數模板,他們傳不同類型的參數就可以調?不同的函數,通過參數不同達到多種形態,之所以叫編譯時多態,是因為他們實參傳給形參的參數匹配是在編譯時完成的,我們把編譯時?般歸為靜態

———————————————————————————————

二.實現多態還有兩個必須重要條件:
? 必須是通過基類的指針或者引?調?虛函數
? 被調?的函數必須是虛函數,并且完成了虛函數重寫/覆蓋。
原因分析:多態實現必須條件分析

———————————————————————————————
三.重寫/覆蓋
1.重寫意味這,通過對父類成員虛函數的聲明,然后重新寫函數實現(聲明采用基類,實現采用自己寫的)
2.函數名,參數,返回值相同
3.由于派生類重寫時的聲明采用的是,基類成員虛函數的聲明因此,在基類中已經寫過virtual在成員函數前,派生類成員函數不用再寫virtual,不過建議寫上

———————————————————————————————

四.靜態/動態多態
1.編譯時多態(靜態多態),函數重載和函數模板,編譯時傳入參數匹配,生成函數
2.運行時多態(動態多態),編譯階段無法知道,實際調用哪個版本的函數是在運行時根據對象的實際類型決定的

———————————————————————————————

五.析構函數的重寫
基類的析構函數為虛函數,此時派?類析構函數只要定義(看上面重寫分析),?論是否加virtual關鍵字,都與基類的析構函數構成重寫,雖然基類與派?類析構函數名字不同看起來不符合重寫的規則,實際上編譯器對析構函數的名稱做了特殊處理,編譯后析構函數的名稱統?處理成destructor,所以基類的析構函數加了vialtual修飾,派?類的析構函數就構成重寫。

delete的原理delete詳解剖析

  1. 在空間上執行析構函數,完成對象中資源的清理工作
  2. 調用operator delete函數釋放對象的空間
class A
{public:virtual ~A(){cout << "~A()" << endl;}
};
class B : public A 
{public:~B(){cout << "~B()->delete:"<<_p<< endl;delete _p;}
protected:
int* _p = new int[10];
};
// 只有派?類Student的析構函數重寫了Person的析構函數,下?的delete對象調?析構函數,才能
//構成多態,才能保證p1和p2指向的對象正確的調?析構函數。
int main()
{A* p1 = new A;A* p2 = new B;delete p1;delete p2;return 0;
}

上面的代碼我們可以看到,如果~A(),不加virtual,那么delete p2時只調?的A的析構函數,沒有調用B的析構函數,就會導致內存泄漏問題,因為~B()中在釋放資源。

注意:這個問題?試中經常考察,?家?定要結合類似下?的樣例才能講清楚,為什么基類中的析構函數建議設計為虛函數。

———————————————————————————————

六.重載 重寫/覆蓋 隱藏 三個概念的對比辨析

在這里插入圖片描述

———————————————————————————————

七.純虛函數和抽象類

在虛函數聲明時在函數簽名末尾添加 = 0,則這個函數為純虛函數,純虛函數不需要定義實現(實現沒啥意義因為要被派?類重寫,但是語法上可以實現),只要聲明即可包含純虛函數的類叫做抽象類,抽象類不能實例化出對象,如果派?類繼承后不重寫純虛函數,那么派?類也是抽象類純虛函數某種程度上強制了派?類重寫虛函數,因為不重寫實例化不出對象

抽象類就類似,car和各種具體車的品牌,car作為抽象類 ,Benz和BMW作為派生類

———————————————————————————————

八.多態底層原理 多態實現必須條件分析
在這里插入圖片描述

對不滿?多態條件(指針或者引?+調?虛函數)的函數調?是在編譯時綁定,也就是編譯時確定調?函數的地址,叫做靜態綁定。
? 滿?多態條件的函數調?是在運?時綁定,也就是在運?時到指向對象的虛函數表中找到調?函數的地址,也就做動態綁定。

虛函數表

? 基類對象的虛函數表中存放基類所有虛函數的地址。同類型的對象共?同?張虛表,不同類型的對象各?有獨?的虛表,所以基類和派?類有各?獨?的虛表。
? 派?類由兩部分構成,繼承下來的基類和??的成員,?般情況下,繼承下來的基類中有虛函數表指針,??就不會再?成虛函數表指針。但是要注意的這?繼承下來的基類部分虛函數表指針和基類對象的虛函數表指針不是同?個就像基類對象的成員和派?類對象中的基類對象成員也獨?的
? 派?類中重寫的基類的虛函數,派?類的虛函數表中對應的虛函數就會被覆蓋成派?類重寫的虛函數地址。
? 派?類的虛函數表中包含,(1)基類的虛函數地址(2)派?類重寫的虛函數地址完成覆蓋,派?類??的虛函數地址三個部分。
? 虛函數表本質是?個存虛函數指針的指針數組,?般情況這個數組最后?放了?個0x00000000標記。(這個C++并沒有進?規定,各個編譯器??定義的,vs系列編譯器會再后?放個0x00000000標記,g++系列編譯不會放)
? 虛函數存在哪的?虛函數和普通函數?樣的,編譯好后是?段指令,都是存在代碼段的,只是虛函數的地址?存到了虛表中。
? 虛函數表存在哪的?這個問題嚴格說并沒有標準答案C++標準并沒有規定,我們寫下?的代碼可以對?驗證?下。vs下是存在代碼段(常量區)

注意:同類型對象共有同一張虛函數表

———————————————————————————————

八.指針數組/數組指針
1.指針數組:void (*pf)()
2.數組指針:int (*pa)[10]

——————————————————————————————
九.
派生類對象析構時會自動在結束時自動增加析構基類部分,目的是保證先子后父
在這里插入圖片描述

——————————————————————————————

繼承

一.讓一個類不能被繼承
1.構造函數私有化(派生類在構造時調用不到基類構造函數)
2.關鍵字final class Base final{ };

二.
1.友元關系不能繼承
2.虛繼承(虛繼承(Virtual Inheritance)是C++中處理多重繼承時避免二義性問題的一種機制,特別是當一個類從多個基類繼承,而這些基類又有一個共同的基類時。通過使用虛繼承,可以確保共同基類的成員在派生類中只有一個副本,從而避免了重復繼承帶來的數據冗余和訪問沖突.)

三.繼承語法

在這里插入圖片描述
四.切片特性
public繼承的派?類對象 可以賦值給 基類的指針 / 基類的引?。這?有個形象的說法叫切?或者切割。寓意把派?類中基類那部分切出來,基類指針或引?指向的是派?類中切出來的基類那部分。
在這里插入圖片描述
五.隱藏

  1. 在繼承體系中基類和派?類都有獨?的作?域。
  2. 派?類和基類中有同名成員,派?類成員將屏蔽基類對同名成員的直接訪問,這種情況叫隱藏。(在派?類成員函數中,可以使? 基類::基類成員 顯?訪問)
  3. 需要注意的是如果是成員函數的隱藏,只需要函數名相同就構成隱藏。
  4. 注意在實際中在繼承體系??最好不要定義同名的成員。

在這里插入圖片描述

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

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

相關文章

SpringAI+MCPServer+MCPClient快速入門

SpringAI MCPServer MCPClient 快速入門編寫大綱 源代碼地址&#xff1a;https://download.csdn.net/download/user_admin_god/90926893 1. 介紹 本文通過使用免費的智普AI的glm-4-flash模型&#xff0c;設計并實現了一個智能問答系統。在該系統中&#xff0c;我們編寫了一…

Linux `vi/vim` 編輯器深度解析與高階應用指南

Linux `vi/vim` 編輯器深度解析與高階應用指南 一、核心功能解析1. 模式系統2. 與主流編輯器對比二、核心操作體系1. 高效導航命令2. 文本操作矩陣三、高階配置體系1. .vimrc 配置示例2. 插件管理系統四、企業級開發實踐1. 代碼編輯技巧2. 宏錄制與批量處理五、可視化與多窗口1…

Java五種方法批量處理List元素全解

Java:如何優雅批量處理List中的每個元素 一、場景分析&#xff1a;為什么需要批量處理List&#xff1f;二、核心方法&#xff1a;五種實現方式對比2.1 普通for循環&#xff08;最直接的方式&#xff09;代碼示例&#xff1a;優缺點&#xff1a; 2.2 Java 8 replaceAll&#xff…

【Elasticsearch】`_refresh`和`_flush`的區別

在Elasticsearch中&#xff0c;_refresh和_flush操作雖然看似都與“刷新”有關&#xff0c;但它們的功能和作用范圍有顯著區別&#xff1a; _refresh操作 - 目的&#xff1a;使索引操作&#xff08;如新增、更新、刪除文檔&#xff09;后的更改能夠立即被搜索到。 - 工作原理…

Java核心數據類型:String深度解析(JDK 8+)

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 問題驅動&#xff1a;從用戶注冊場景說起 場景描述&#xff1a;開發一個用戶注冊功能時&#xff0c;需要處理用戶名的校驗、格式化和存儲。你可能會遇到…

人員睡崗檢測算法AI智能分析網關V4打造工業/安防/交通等多場景應用方案

一、引言? 在工業生產、安防監控等多領域&#xff0c;眾多崗位需員工長時間值守&#xff0c;如流水線工人、監控值班員等。但高強度工作易引發睡崗問題&#xff0c;導致生產效率下降&#xff0c;甚至造成安全事故與財產損失。傳統人工巡檢響應慢、成本高&#xff0c;難以滿足…

自動生成提示技術突破:AUTOPROMPT重塑語言模型應用

AUTOPROMPT 預訓練語言模型的顯著成功促使人們研究這些模型在預訓練期間學習了哪些類型的知識。將任務重新表述為填空題(例如,完形填空測試)是衡量此類知識的自然方法 但是,它的使用受到編寫合適提示所需的手動工作和猜測的限制。為了解決這個問題,我們開發了 AUTOPROMP…

6個月Python學習計劃 Day 7 - 復盤 + 測試日

第一周 Day 1 - Python 基礎入門 & 開發環境搭建 Day 2 - 條件判斷、用戶輸入、格式化輸出 Day 3 - 循環語句 range 函數 Day 4 - 列表 & 元組基礎 Day 5 - 字典&#xff08;dict&#xff09;與集合&#xff08;set&#xff09; Day 6 - 綜合實戰&#xff1a;學生信息…

Pycharm and Flask 的學習心得(9)

request對象&#xff1a; 1. request包含前端發送過來的所有請求數據 將from表單里的內容CV到request里面&#xff0c;可以添加if語句來做判斷出請求類型后的操作 在網頁上的表單上input的數據&#xff0c;后端如何獲取呢&#xff1f; request對象獲取前端發送來的數據 // …

設計模式-依賴倒轉原則

依賴倒轉原則 依賴倒轉原則 (Dependency Inversion Principle, DIP) 是面向對象設計中 SOLID 原則的第五個原則。 它包含兩條核心思想&#xff1a; 高層模塊不應該依賴于低層模塊。兩者都應該依賴于抽象。 高層模塊 (High-level modules): 通常包含復雜的業務邏輯和策略&…

AI賦能引爆短劇全球化風潮,騰訊云媒體處理助力短劇平臺出海吸金

2023年&#xff0c;中國短劇市場以全平臺8000萬日投放、近500億規模的爆發式增長震驚行業。緊湊的內容、爽快的劇情令國內觀眾迅速愛上了幾分鐘一集的微短劇。然而在平臺內卷、監管收緊、巨頭入場等因素的沖擊下&#xff0c;不到兩年時間&#xff0c;這條賽道就已陷入紅海。但與…

開源第三方庫發展現狀

摘要&#xff1a;當前&#xff0c;開源第三方庫生態正呈現爆發式增長趨勢。GitHub 目前已托管超過 4.2 億個代碼倉庫&#xff0c;遠超早期統計的 1 億規模&#xff0c;顯示出開發者社區的活躍度持續攀升。同時&#xff0c;37 個主流包管理器所維護的開源組件數量可能已達到數千…

服務器開機自啟動服務

前言&#xff1a; 將服務器中腳本開啟自啟動執行 步驟&#xff1a; 1.創建一個 systemd 服務文件: /etc/systemd/system/ 目錄下創建一個新的服務文件。例如&#xff0c;命名為 myapp.service&#xff1a; sudo nano /etc/systemd/system/myapp.service2.編寫 [Unit] Descri…

采用Bright Data+n8n+AI打造自動化新聞助手:每天5分鐘實現內容日更

一、引言 在信息爆炸的時代&#xff0c;作為科技領域的內容創作者&#xff0c;我每天都要花費2-3小時手動收集行業新聞、撰寫摘要并發布到各個社群。直到我發現Bright Datan8nAI這套"黃金組合"&#xff0c;才真正實現了從"人工搬運"到"智能自動化&qu…

ROS云課三分鐘-3D性能測試supertuxkart和游戲推薦等-國際象棋

ROS云課三分鐘-破壁篇GCompris-一小部分支持Edu應用列表-2025-CSDN博客 很多時候&#xff0c;有一種思維定勢&#xff0c;將人鎖住&#xff0c;人口就是囚。 口人囚~口加人等于囚-CSDN博客 如果突破&#xff0c;跳出問題&#xff0c;再看問題。 這門課程&#xff0c;或者這個平…

學習率及相關優化參數詳解:驅動模型高效訓練

一、引言 在模型微調的核心參數體系中&#xff0c;優化相關參數是決定訓練效率與模型性能的關鍵變量。它們如同精密機械的齒輪&#xff0c;彼此聯動、相互影響&#xff0c;共同調控著模型在參數空間中的搜索路徑。本文將圍繞學習率、訓練輪數、批處理大小、梯度累積和學習率調…

golang 柯里化(Currying)

使用場景&#xff1a;參數在語義上屬于不同組&#xff0c;Go 語法無法在單次調用中聲明多組可變參數&#xff0c;通過柯里化可以實現分步接收參數。 有的參數是在不同時間段產生&#xff0c;使用Currying可以讓函數記住&#xff08;緩存&#xff09;參數&#xff0c;避免應用代…

電腦革命家測試版:硬件檢測,6MB 輕量無廣告 清理垃圾 + 禁用系統更新

各位電腦小白和大神們&#xff0c;我跟你們說啊&#xff01;有個超牛的東西叫電腦革命家測試版&#xff0c;這是吾愛破解論壇的開發者搞出來的免費無廣告系統工具集合&#xff0c;主打硬件檢測和系統優化&#xff0c;就像是魯大師這些軟件的平替。下面我給你們嘮嘮它的核心功能…

R 語言科研繪圖第 52 期 --- 網絡圖-分組

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

EfficientLLM: Efficiency in Large Language Models 高效大模型

目錄 第1章&#xff1a;引言第2章&#xff1a;觀察與見解2.1 總體觀察&#xff08;Overall Observations&#xff09;2.2 從EfficientLLM基準中得出的新見解 第3章&#xff1a;背景3.1 大語言模型&#xff08;LLMs&#xff09;3.2 提升LLMs效率的方法3.2.1 硬件創新3.2.2 軟件優…