多態的總結

什么是多態?

答:多態是多種形態,是為了完成某種行為時,不同對象會產生不同的形態(結合車票例子解釋)

2. 什么是重載、重寫(覆蓋)、重定義(隱藏)?

答:重載的條件是:在同一作用域下,同名函數的(參數個數,參數類型,參數順序不同)構成重載。

而重寫的條件是:在不同作用域下,(函數名,返回類型,參數列表)均相同,并且是虛函數構成的,叫做重寫

最后,重定義只要求不同作用域下,函數名相同的函數叫做重定義。兩個基類與派生類的同名函數,不是重寫就是重定義

3. 多態的實現原理?

答:多態分為靜態多態(編譯期間)和動態多態(運行期間)

而靜態多態:傳不同參數。調用不同函數。自動識別類型,根據函數名修飾規則(比如像函數重載,編譯時進行匹配,過了之后,如果走到鏈接的時候,通過函數名修飾規則去找)去尋找對應的變量

而動態多態:傳不同對象,調不同函數。(繼承中虛函數重寫+父類指針調用)就通過生成虛函數表,做到指向哪個類,就去哪個類的對象的虛函數表找。即指向誰就調用誰

4. inline函數可以是虛函數嗎?

答:可以,不過編譯器就忽略inline屬性,這個函數就不再是inline,因為虛函數要放到虛表中去。

5. 靜態成員可以是虛函數嗎?

答:不能,因為靜態成員函數沒有this指針,使用類型::成員函數的調用方式無法訪問虛函數表,所以靜態成員函數無法放進虛函數表。

6. 構造函數可以是虛函數嗎?

答:不能,因為對象中的虛函數表指針是在構造函數初始化列表階段才初始化的

形象地說就是:先有雞還是先有蛋?調構造函數,如果是虛函數,虛函數的目的就是實現多態,那么實現要多態,你連虛表都沒有,你去哪里找虛函數地址?因此對象初始化好了才有虛表,通過虛表找虛函數。

7. 析構函數可以是虛函數嗎?什么場景下析構函數是虛函數?

答:可以,并且最好把基類的析構函數定義成虛函數。基類只要定義了虛函數,那么派生類的析構函數都會與基類的析構函數構成重寫,其中它的內部原理是統一變成一個叫destructor的函數名。來保證對象的正確銷毀,做到先釋放派生類,再去釋放基類的順序。

8. 對象訪問普通函數快還是虛函數更快?

答:首先得分情況:如果是普通對象,是一樣快的。如果是指針對象或者是引用對象,則調用的普通函數快,因為構成多態,運行時調用虛函數需要到虛函數表中去查找。

9. 虛函數表是在什么階段生成的,存在哪的?

答:虛函數表是在編譯階段就生成的,一般情況下存在代碼段(常量區)的。(+多態那篇文章里的證明)

10. C++菱形繼承的問題?虛繼承的原理?

答:C++的菱形繼承會存在二義性和冗余性。

而虛繼承就是為了解決上面的問題的:通過一個虛基表,虛基表存的是基類偏移量的表,通過虛基表計算變量在對象里面的地址,再隨著地址去訪問

11. 什么是抽象類?抽象類的作用?

答:抽象類就是在虛函數后面寫=0;抽象類強制重寫了虛函數,另外抽象類體現出了接口繼承關系。

最后到了本次雞湯:

?

?

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

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

相關文章

VBA 讀取指定范圍內的單元格數據,生成csv文件

目錄 一. 需求二. 宏代碼三. 添加按鈕 一. 需求 ?有如下表格,現在想在Excel中添加一個按鈕 點擊按鈕之后,讀取該表格中的數據,生成csv文件將csv文件輸出到和Excel同級目錄 二. 宏代碼 Application.PathSeparator:路徑分隔符Cr…

【Code Agent Benchmark】論文分享No.15:TAU-Bench

論文名稱:τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains 論文:https://arxiv.org/abs/2406.12045 機構:Sierra Github 鏈接:https://github.com/sierra-research/tau-bench# 簡介 相比于Swe-ben…

Linux下 使用 SSH 完成 Git 綁定 GitHub

文章目錄 1、檢查 SSH2、生成 SSH key3、添加 SSH key4、驗證綁定是否成功 1、檢查 SSH Git Bash 中輸入ssh命令,查看本機是否安裝 SSH: 2、生成 SSH key (1)輸入 ssh-keygen -t rsa 命令,表示我們指定 RSA 算法生…

Java 8 Stream 流操作全解析

文章目錄 **一、Stream 流簡介****二、Stream 流核心操作****1. 創建 Stream****2. 中間操作&#xff08;Intermediate Operations&#xff09;****filter(Predicate<T>)&#xff1a;過濾數據****1. 簡單條件過濾****2. 多條件組合****3. 過濾對象集合****4. 過濾 null 值…

Java——設計模式(Design Pattern)

設計模式&#xff08;Design Pattern&#xff09;是軟件開發中針對常見問題的經典解決方案&#xff0c;由 GoF&#xff08;Gang of Four&#xff09;在《設計模式&#xff1a;可復用面向對象軟件的基礎》一書中歸納為23 種模式&#xff0c;分為三大類&#xff1a;創建型模式、結…

python語法學習

1.python的類的定義 class Memory_Manager: 2.__init__ 方法 __init__ 是類的構造方法&#xff0c;用于初始化類的實例。 self 是類實例的引用&#xff0c;用于訪問類的屬性和方法。 3.方法定義 類中的方法是類的功能實現&#xff0c;通過 def 定義。 4.if __name__ __ma…

如何屏蔽mac電腦更新提醒,禁止系統更新(最新有效方法)

每次打開Mac電腦時&#xff0c;頻繁的系統更新提醒可能會對我們的工作和使用體驗造成干擾。為了屏蔽這些更新提醒并禁止系統自動更新&#xff0c;我們可以通過修改Hosts文件來實現。以下是詳細步驟和方法&#xff0c;幫助你徹底屏蔽macOS的更新提醒。 系統關閉了自動更新也是…

windows10重裝ssh無法下載

問題 windows10重裝之后&#xff0c;ssh每次都是由于連接的是流量計數的網絡無法下載。 解決方法 https://www.cnblogs.com/zhg1016/p/17353348.html

解決 cursor 中不能進入 conda 虛擬環境

【問題】 遇到一個小問題&#xff0c;我創建的conda 環境在 cmd、powershell中都可以激活&#xff0c;但在pycharm、cursor中卻不能激活&#xff1f; 看圖 cmd中正常&#xff1a; cursor中不正常&#xff1a; 【解決方法】 cursor 中&#xff0c;打開終端&#xff0c;輸入&a…

跨平臺三維可視化與圖形庫.VTK圖形庫.

1. 科學數據可視化 體繪制&#xff08;Volume Rendering&#xff09; 用于醫學影像&#xff08;如CT、MRI&#xff09;、氣象數據&#xff08;如云層、流體模擬&#xff09;的三維渲染&#xff0c;支持透明度、光照和顏色映射。 等值面提取&#xff08;Iso-Surfacing&#xff…

【螢火工場GD32VW553-IOT開發板】ADC電壓的LabVIEW采集

【螢火工場GD32VW553-IOT開發板】ADC電壓的LabVIEW采集 &#x1f50b; 本文介紹了螢火工場 GD32VW553-IOT 開發板通過串口中斷查詢的方式采集 ADC 電壓及溫度轉換數據&#xff0c;并進一步結合LabVIEW上位機實現數據自動采集和實時監測的項目設計。 項目介紹 串口中斷查詢&a…

視頻監控管理平臺EasyCVR結合AI分析技術構建高空拋物智能監控系統,筑牢社區安全防護網

高空拋物嚴重威脅居民生命安全與公共秩序&#xff0c;傳統監管手段存在追責難、威懾弱等問題。本方案基于EasyCVR視頻監控與AI視頻分析技術&#xff08;智能分析網關&#xff09;&#xff0c;構建高空拋物智能監控系統&#xff0c;實現24小時實時監測、智能識別與精準預警&…

Python----循環神經網絡(LSTM:長短期記憶網絡)

一、RNN的長期依賴問題 可以看到序列越長累乘項項數越多&#xff0c;項數越多就可能會讓累乘結果越小&#xff0c;此時對于W 的更新就取決于第一項或者是前幾項&#xff0c;也就是RNN模型會丟失很多較遠時刻的信息而 更關注當前較近的幾個時刻的信息&#xff0c;即沒有很好的長…

【跨端框架檢測】使用adb logcat檢測Android APP使用的跨端框架方法總結

目錄 Weex 跨端框架使用了uni-app的情況區分使用了uni-app還是Weex 判斷使用了Xamarin判斷使用了KMM框架判斷使用了 ??Ionic 框架判斷使用了Cordova框架判斷使用了Capacitor 框架使用了React Native框架使用了QT框架使用了Cocos框架使用了Electron 框架使用了flutter 框架使用…

以加減法計算器為例,了解C++命名作用域與函數調用

************* C topic: 命名作用域與函數調用 ************* The concept is fully introducted in the last artical. Please refer to 抽象&#xff1a;C命名作用域與函數調用-CSDN博客 And lets make a calculator to review the basic structure in c. 1、全局函數 A…

AIGC小程序項目

一、文生文功能 &#xff08;1&#xff09;前端部分 使用 Pinia 狀態管理庫創建的聊天機器人消息存儲模塊&#xff0c;它實現了文生文&#xff08;文本生成文本&#xff09;的核心邏輯。 1.Pinia狀態管理 這個模塊管理兩個主要狀態&#xff1a; messages&#xff1a;存儲所…

Axios中POST、PUT、PATCH用法區別

在 Axios 中&#xff0c;POST、PUT 和 PATCH 是用于發送 HTTP 請求的三種不同方法&#xff0c;它們的核心區別源自 HTTP 協議的設計語義。以下是它們的用法和區別&#xff1a; 1. POST 語義&#xff1a;用于創建新資源。 特點&#xff1a; 非冪等&#xff08;多次調用可能產生…

[爬蟲知識] Cookie與Session

相關實戰案例&#xff1a;[爬蟲實戰] 爬取小說標題與對應內容 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 一、引入場景 在http協議中&#xff0c;瀏覽器是無狀態&#xff08;即無記憶&#xff09;的&#xff0c;對于請求與響應的產生數據&#…

怎樣改變中斷優先級?

在STM32中改變中斷優先級可以通過STM32CubeMX配置和代碼中設置兩種方式來實現。以下以STM32F1系列為例進行說明: 使用STM32CubeMX配置 打開工程:在STM32CubeMX中打開你的工程。進入NVIC配置:在Pinout & Configuration選項卡中,點擊NVIC進入中斷向量控制器配置界面。選…

科學計算中的深度學習模型精解:CNN、U-Net 和 Diffusion Models

關鍵要點 模型概述:卷積神經網絡(CNN)、U-Net 和 Diffusion Models 是深度學習中的核心模型,廣泛應用于科學計算任務,如偏微分方程(PDE)求解、圖像分割和數據生成。科學計算應用:CNN 可用于高效求解 PDEs,U-Net 擅長醫學圖像分割和材料分析,Diffusion Models 在生成合…