重載、覆蓋(重寫)、重定義(同名隱藏)的區別 (超詳解)

📚 重載(Overloading)、覆蓋(Overriding)、重定義(Hiding)是面向對象編程中常見的概念,它們分別用于描述不同情況下函數或方法的行為。

目錄

重載(Overloading)

覆蓋(Overriding)

重定義(Hiding)

總結


重載(Overloading)

? ? 重載指的是在同一個作用域內,可以定義多個同名的函數或方法,但它們的參數列表必須不同(包括參數類型、個數或順序)。編譯器會根據調用時提供的參數類型和個數來決定調用哪個具體的函數。

🎃 使用場景:

當需要為同一操作提供多種參數類型支持時,可以使用函數重載。例如,一個打印函數可以接受整數、浮點數、字符串等不同類型的參數。

提供默認參數值也是函數重載的一種形式,這樣可以簡化函數的調用。

class Example {
public:void print(int num) {// 打印一個整數}void print(double num) {// 打印一個雙精度浮點數}
};int main() {Example obj;obj.print(10);      // 調用 void print(int num)obj.print(3.14);    // 調用 void print(double num)return 0;
}

? 在Example 類中定義了兩個名為 print 的方法,一個接受整數參數,另一個接受雙精度浮點數參數。它們之間的區別在于參數的類型。

覆蓋(Overriding)

? ? ?覆蓋指的是派生類重寫(override)基類的虛函數。只有虛函數才能被派生類覆蓋。通過覆蓋,派生類可以提供自己特定的實現,而不使用基類的實現。

🎃 使用場景:

當基類定義了一個虛函數,而派生類需要根據自身的邏輯重新實現這個函數時,使用覆蓋。

通過基類指針或引用調用虛函數時,實際執行派生類中的版本,實現運行時多態。

class Base {
public:virtual void display() {cout << "Base class display function" << endl;}
};class Derived : public Base {
public:void display() override {cout << "Derived class display function" << endl;}
};

? Derived 類覆蓋了 Base 類中的 display 函數。當通過基類指針或引用調用 display 函數時,實際執行的是派生類 Derived 中的實現。

重定義(Hiding)

? ? ?重定義是指在派生類中定義了與基類同名但參數列表不同的函數。在這種情況下,派生類的函數會隱藏基類中的同名函數。這種情況下,基類中的同名函數變得不可見,即使使用基類指針或引用也無法訪問到它。

🎃 使用場景:

當派生類需要定義一個與基類同名但參數不同的函數時,這個新函數會隱藏基類中的同名函數。

使用重定義時需要小心,因為基類的同名函數會被派生類的函數遮蔽,可能導致意外的調用行為。

class Base {
public:void display() {cout << "Base class display function" << endl;}
};class Derived : public Base {
public:void display(int num) {cout << "Derived class display function with integer: " << num << endl;}
};

? Derived 類定義了一個名為 display 的函數,帶有一個整數參數。它重定義了 Base 類中的 display 函數。如果我們嘗試通過基類指針或引用調用 display,編譯器將會報錯,因為沒有與指定參數列表匹配的基類函數。

總結

重載:同一作用域內多個函數名相同但參數列表不同。

覆蓋:派生類重寫基類的虛函數,提供特定實現。

重定義:派生類中定義了與基類同名但參數列表不同的函數,導致基類函數不可見。

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

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

相關文章

ST7789 linux4.x驅動

文章目錄 ST7789 linux4.x驅動設備樹配置驅動程序編譯驅動測試驅動 ST7789 linux4.x驅動 設備樹配置 pinctrl_ecspi2_cs_1: ecspi2_cs_grp-1 {fsl,pins <MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x40017059>; };pinctrl_ecspi2_1: escpi2grp {fsl,pins <MX6UL_PAD_CSI_…

RocketMQ快速入門:主從、集群模式原理及搭建實操(十一)

目錄 0. 引言1. 前備知識1.1 namesrv集群模式1.2 broker集群模式1.2 broker主從復制原理 2. 集群部署2.1 環境準備2.2 配置講解2.3 一主多從模式部署2.4 多主無從模式部署2.5 多主多從模式部署 3. 總結 0. 引言 在學習完rocketmq的基礎知識后&#xff0c;我們進入rocketmq高可…

痙攣性斜頸對生活有哪些影響?

痙攣性斜頸&#xff0c;這個名字聽起來可能并不熟悉&#xff0c;但它實際上是一種神經系統疾病&#xff0c;影響著全球數百萬人的生活質量。它以一種無法控制的方式&#xff0c;使患者的頸部肌肉發生不自主的收縮&#xff0c;導致頭部姿勢異常。對于患者來說&#xff0c;痙攣性…

和Bug較勁的第n天:[Error: Unable to open snapshot file: No such file or directory]

問題描述 最近做了一個小demo&#xff0c;基于parcel的&#xff0c;在遷移倉庫的時候發生了一個報錯 [Error: Unable to open snapshot file: No such file or directory] 原因分析&#xff1a; 在遷移倉庫的時候&#xff0c;我將項目放入了一個以中文命名的文件夾里&#xf…

模電基礎 - 信號的運算和處理

目錄 一. 簡介 二. 加法 三. 減法 四. 乘法 五. 除法 六. 總結 一. 簡介 在模電基礎中&#xff0c;信號的運算和處理是非常重要的內容。 信號的運算包括加法、減法、乘法、除法等。通過使用集成運放&#xff0c;可以很容易地實現這些運算。例如&#xff0c;利用反相輸入…

算法的幾種常見形式

算法&#xff08;Algorithm&#xff09; 算法&#xff08;Algorithm&#xff09;是指解決問題或完成任務的一系列明確的步驟或規則。在計算機科學中&#xff0c;算法是程序的核心部分&#xff0c;它定義了如何執行特定的任務或解決特定的問題。算法可以用多種方式來表示和實現…

宜春旅游集散中心展廳OLED透明屏方案設計

一、項目概述 為提升宜春旅游集散中心展廳的現代化展示水平&#xff0c;增強游客的參觀體驗&#xff0c;我們計劃在展廳的核心區域引入OLED透明屏技術。該方案旨在通過高科技的視覺呈現方式&#xff0c;將展品信息以虛擬與現實相結合的方式展現&#xff0c;打造出一個既具科技感…

谷粒商城學習筆記-22-分布式組件-SpringCloud-OpenFeign測試遠程調用

文章目錄 一&#xff0c;OpenFeign的簡介二&#xff0c;OpenFeign的使用步驟1&#xff0c;場景說明2&#xff0c;引入依賴2&#xff0c;開啟OpenFeign3&#xff0c;編寫Feign接口4&#xff0c;使用feign調用遠程接口5&#xff0c;驗證 錯誤記錄 上一節學習了注冊中心&#xff0…

鼠標錄制工具|鍵鼠軌跡錄制,實現自動辦公

利用鍵鼠錄制工具錄制固定的鼠標點擊、鍵盤輸入等操作&#xff0c;實現自動化執行固定操作&#xff0c;節省時間。鼠標錄制功能可以錄制多步驟的操作&#xff0c;將錄制的動作保存并命名&#xff0c;甚至可以編輯操作速度。下面將演示幾種生活中常見的案例&#xff0c;詳細講解…

企業微信hook接口協議,移除群成員通知

移除群成員通知 返回示例 {"flag": 0, "receiver": 0, "sender_name": "", "is_room": 1, "server_id": 15318083, "send_time": 1687688952, "sender": 1688855749266556, "referid&…

k8s中使用cert-manager生成自簽名證書

一、安裝 cert-manager 注意查看cert-manager和K8S支持的對應版本 我的 k8sv1.28.2&#xff0c;cert-manager v1.12.11 下載 cert-manager.yaml 文件&#xff0c;執行 kubectl apply -f cert-manager.yaml二、生成自簽名證書 cert-selfsigned.yaml apiVersion: cert-manage…

【SpringBoot】隨機鹽值+雙重SHA256加密實戰

目錄&#xff1a; 1.SHA-256和隨機鹽值 2.前端實現 3.后端實現 1.SHA-256和Salt 1.1.什么是SHA-256 SHA-256是一種信息摘要算法&#xff0c;也是一種密碼散列函數。對于任意長度的消息&#xff0c;SHA256都會產生一個256bit長的散列值&#xff08;哈希值&#xff09;&…

插件更新了!

最近花了點時間&#xff0c;給網頁插件添加了新功能&#xff0c;下面簡單給大家介紹一下如何使用 我們安裝好插件后&#xff0c;進入網頁就可以看到一個帶logo的按鈕了&#xff0c;我們可以點一下就可以跳出快捷操作 不同頁面點擊會出現不同的功能&#xff0c;大家可以根據自己…

dy商品評論采集

摘要 本文將詳細介紹如何通過抖音商品評論采集來獲取精準的用戶反饋&#xff0c;從而優化產品和營銷策略。通過這個指南&#xff0c;您將學會如何設置評論采集系統&#xff0c;分析用戶評論數據&#xff0c;以及如何利用這些數據來吸引更多粉絲&#xff0c;增加商品銷量。 返…

跨境傳輸需要遵守哪些準則,如何做到有效管控?

在全球化的商業環境中&#xff0c;跨國企業面臨著數據跨境傳輸的挑戰。隨著業務的擴展&#xff0c;企業需要在不同國家和地區之間高效、安全地傳輸大量數據。選擇合適的跨境傳輸方案對于保障數據安全、提高業務效率、遵守法律法規至關重要。 跨境傳輸數據需要遵守的準則和規定主…

Nginx:關于實現跨域代理

運維專題 Nginx&#xff1a;關于實現跨域代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.ne…

數據賦能(142)——開發:數據合并——技術方法、主要工具

技術方法 數據合并的技術方法主要包括以下幾種&#xff1a; 軸向連接&#xff08;Concatenation&#xff09;&#xff1a; 使用pd.concat()函數&#xff0c;沿一個軸&#xff08;通常是行或列&#xff09;將多個DataFrame對象連接在一起&#xff0c;形成一個新的DataFrame對…

html自學筆記與面試會問到問題

第一章 1.1什么是JavaScript&#xff1f; 一各跨平臺的腳本語言1.2ECMA特點&#xff1a; 由三大部分組成&#xff1a;核心語法(關鍵字、核心對象、語法)、DOM、BOM1.3 取余運算&#xff08;又叫取模運算&#xff09;&#xff1a; 取余&#xff1a;整除后&#xff0c;除不盡的…

發那科機床聯網串口配置

本文章僅針對無網口&#xff0c;需要通過串口輸出采集數據情況。跟這篇文章互為參考&#xff0c;一個理論&#xff0c;一個實戰。 Fanuc DPRNT宏程序串口采集-CSDN博客 一、禁用機器串口監控 選擇System、monit 二、設置參數可寫 在MDI模式中字符面板上按OFS/SET鍵,連按致屏…

終于搞定了通過兩路藍牙接收數據

一直想做無線傳感器&#xff0c;通過藍牙來接收數據&#xff0c;無奈因為arduino接收串口數據的一些問題&#xff0c;一直擱到現在。因為學校里給學生開了選修課&#xff0c;所以手邊有一些nano和mega可以使用&#xff0c;所以就做了用兩個nano加上兩個藍牙模塊來發射數據&…