C++_函數重載

? ? ? ? 前言:

????????函數重載的意思就是可以有多個同名函數存在,但是這些同名函數的參數列表有著不同情形,以便區分。在C++中,支持在同一作用域下可以聲明、定義多個同名函數,但是這些函數的形參類型,類型順序以及參數個數三者中至少有一個是有區別的。

1、情形一:參數類型不同

? ? ? ? 既同名函數的形參類型不能相同,代碼如下:

#include<iostream>
using namespace std;//定義兩個func同名函數
void func(int x, int y)
{cout << "func(int x, int y)" << endl;//打印函數
}void func(double x, double y)
{cout << "func(double x, double y)" << endl;//打印函數
}int main()
{//調用這兩個函數func(2, 3);//系統會自動調用第一個funcfunc(2.5, 3.5);//系統會自動調用第二個funcreturn 0;
}

? ? ? ? 運行結果:

? ? ? ? 從結果中可以看出,系統會自動識別并調用一個形參類型最為接近的實參類型的函數,盡管有多個和該函數重名的函數,系統也不會報錯。

2、情形二:參數個數不同?

? ? ? ? 既同名函數的形參類型可以相同,但是要在形參的個數上有所區分。代碼如下:

#include<iostream>
using namespace std;void func(int x, int y)
{cout << "func(int x, int y)" << endl;//打印函數
}void func(int x)
{cout << "func(int x)" << endl;//打印函數
}int main()
{func(2);return 0;
}

? ? ? ? 運行結果:

? ? ? ? 從結果中可以看出,編譯器同樣會根據形參個數的不同去調用我們期望調用的函數。

3、情形三:參數類型的順序不同

? ? ? ? 注意這里指的順序不同是指第一個形參類型與第二個形參類型的前后順序,并不是形參名稱順序不同,代碼如下:

#include<iostream>
using namespace std;void func(int x, char y)
{cout << "func(int x, char y)" << endl;//打印函數
}void func(char x, int y)
{cout << "func(char x, int y)" << endl;//打印函數
}int main()
{//調用func(2, 'a');func('b',3);return 0;
}

????????運行結果:

????????從結果中可以看出,即使同名函數的形參個數和形參類型都相同,只要他們形參類型的順序不同編譯器也可以精確調用。

4、函數返回值不同能否構成函數重載

? ? ? ? 上文說到了在三個情形下都能構成函數重載,那么如果函數的返回類型不相同按理來說也可以對同名函數進行區分,但是實際上僅僅通過對返回類型的區分是不能夠判斷是否為函數重載。原因在于編譯器在編譯完成后會對原本的函數名進行修飾,是根據函數形參、實參的邏輯進行分析然后修飾。然而函數調用的代碼是不涉及返回類型的區分,因此修飾的時候不參考函數的返回類型。所以不能通過區分返回類型來構建函數重載。

? ? ? ? 具體示意圖如下:

? ? ? ? 可以從上圖看到,編譯器之所以可以區分同名函數,是根據函數的形參、實參進行分析,從而對函數名進行修飾。如果只看調用函數的代碼,是看不出要調用函數的返回類型,就無法進行調用函數與定義函數的區分,因此返回類型不被作為修飾參考。

結語:

? ? ? ? 以上就是關于函數重載的講解,希望本文可以給你帶來更多的收獲,如果本文對你起到了幫助,希望可以動動小指頭幫忙點贊👍+關注😎+收藏👌!如果有遺漏或者有誤的地方歡迎大家在評論區補充~!!謝謝大家!!

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

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

相關文章

AI大規模專題報告:大規模語言模型從理論到實踐

今天分享的AI系列深度研究報告&#xff1a;《AI大規模專題報告&#xff1a;大規模語言模型從理論到實踐》。 &#xff08;報告出品方&#xff1a;光大證券&#xff09; 報告共計&#xff1a;25頁 大規模語言模型基本概念 語言是人類與其他動物最重要的區別&#xff0c;而人類…

深入理解 Promise:前端異步編程的核心概念

深入理解 Promise&#xff1a;前端異步編程的核心概念 本文將幫助您深入理解 Promise&#xff0c;這是前端異步編程的核心概念。通過詳細介紹 Promise 的工作原理、常見用法和實際示例&#xff0c;您將學會如何優雅地處理異步操作&#xff0c;并解決回調地獄問題。 異步編程和…

Linux的硬盤管理

本章主要介紹Linux磁盤管理 了解分區的概念對硬盤進行分區swap分區的管理 新的硬盤首先需要對其進行分區和格式化&#xff0c;下面來了解一下硬盤的結構&#xff0c;如圖 硬盤的磁盤上有一個個圈&#xff0c;每兩個圈組成一個磁道。從中間往外發射線&#xff0c;把每個磁道分…

信息系統工程的基本概念

系統是由相互作用和相互依賴的若干部分&#xff0c;按一定規律結合成的、具有特定功能的有機整體。系統有下述特性&#xff1a; &#xff08;1&#xff09;集合性。系統是由許多元素有機地組成的整體。每個元素服從整體&#xff0c;追求全局最優。 &#xff08;2&#xff09;相…

springboot3遠程調用

RPC 兩個服務器之間的調用 遠程請求 內部服務之間的調用 可以通過 cloud 注冊中心 openfeign等 外部服務的調用 http請求 外部協議 api:遠程接口 sdk&#xff1a;本地調用 調用阿里云的天氣請求

深度學習|詞嵌入的演變

文本嵌入&#xff0c;也稱為詞嵌入&#xff0c;是文本數據的高維、密集向量表示&#xff0c;可以測量不同文本之間的語義和句法相似性。它們通常是通過在大量文本數據上訓練 Word2Vec、GloVe 或 BERT 等機器學習模型來創建的。這些模型能夠捕獲單詞和短語之間的復雜關系&#x…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 27 章:如何避開和繞過所有人工智能內容檢測器

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 27 章&#xff1a;如何避開和繞過所有人工智能內容檢測器 使用高易錯性和突發性方法 與人工智能生成的文本相比&#xff0c;人類寫作往往具有更多的突發性&#xff0c;這是由于人類往往比人工智能生成的文…

【開源】基于Vue+SpringBoot的陜西非物質文化遺產網站

文末獲取源碼&#xff0c;項目編號&#xff1a; S 065 。 \color{red}{文末獲取源碼&#xff0c;項目編號&#xff1a;S065。} 文末獲取源碼&#xff0c;項目編號&#xff1a;S065。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 設計目標2.2 研究內容2.3 研究方法與…

GEE中Landsat中大改變——Landsat Collection 1 到 Collection 2 影像集合遷移

Landsat Collection 1 到 Collection 2 遷移 本指南提供了從Landsat Collection 1 數據切換 到 Collection 2 數據的說明。自 2022 年以來,集合 2 已在 Earth Engine 中完全可用, 自 2021 年 12 月 31 日以來,美國地質調查局 (USGS) 未生成集合 1 數據。Landsat Collection …

3D點云:平面模型上提取凸(凹)多邊形方法

目錄 一、實現原理 二、實現代碼 三、運行結果 一、實現原理 首先要在點云中提取出潛在平面,對原始點云數據進行濾波,根據提取出的平面模型系數從濾波后的點云進行投影,然后根據投影后的點云計算其對應的二維凹(凸)多邊形。 二、實現代碼 #in

webrtc 設置不獲取鼠標 啟用回聲消除

數 getDisplayMedia()&#xff08;屬于 navigator.mediaDevices 的一部分&#xff09;與 getUserMedia() 類似&#xff0c;用于打開顯示內容&#xff08;或部分內容&#xff0c;如窗口&#xff09;。返回的 MediaStream 與使用 getUserMedia() 時相同。 顯示鼠標與否 getDisp…

案例064:基于微信小程序的考研論壇設計

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

正則表達式(7):轉義符

正則表達式&#xff08;7&#xff09;&#xff1a;正則表達式&#xff08;5&#xff09;&#xff1a;轉義符 本博文轉載自 此處&#xff0c;我們來認識一個常用符號&#xff0c;它就是反斜杠 “\” 反斜杠有什么作用呢&#xff1f;先不著急解釋&#xff0c;先來看個小例子。 …

【游戲引擎 - C#腳本系統】6、C#端調用C++函數

強烈建議閱讀Mono官方文檔 有mono庫提供的API&#xff0c;這個過程非常簡單&#xff0c;通過mono在C中注冊函數&#xff0c;然后在C#中聲明和調用這些函數 1、在C中注冊Internal Call&#xff1a; C代碼中定義一個函數 static void CppFunc() {std::cout << "這…

24 遞歸求解二叉樹打家劫舍

問題描述&#xff1a;在上次大街萬一條街道之后和一圈房屋后&#xff0c;小偷又發現了一個新的可行竊的地區。這個地區只有一個入口&#xff0c;我們稱之為根。除了根之外&#xff0c;每棟房子有且只有一個父房子與之項鏈&#xff0c;一番偵查之后&#xff0c;聰明的小偷意識到…

CGAL的3D簡單網格數據結構

由具有多個曲面面片的多面體曲面生成的多域四面體網格。將顯示完整的三角剖分&#xff0c;包括屬于或不屬于網格復合體、曲面面片和特征邊的單元。 1、網格復合體、 此軟件包致力于三維單純形網格數據結構的表示。 一個3D單純形復雜體由點、線段、三角形、四面體及其相應的組合…

從零開始搭建鏈上dex自動化價差套利程序(13)

優化 優化觸發條件&#xff1a; 之前的觸發條件有問題&#xff0c;導致遲遲不能觸發&#xff0c;優化后觸發條件如下&#xff1a; dydx_take 0.0002apex_make 0.0005?float(b_first_price_apex)-float(s_first_price_dydx) > float(b_first_price_apex)*apex_makefloat…

華為數通---配置Smart Link主備備份示例

定義 Smart Link&#xff0c;又叫做備份鏈路。一個Smart Link由兩個接口組成&#xff0c;其中一個接口作為另一個的備份。Smart Link常用于雙上行組網&#xff0c;提供可靠高效的備份和快速的切換機制。 目的 下游設備連接到上游設備&#xff0c;當使用單上行方式時&…

Microsoft 365 Copilot正式上線,如何穩定訪問體驗?

如果將微軟對人工智能的投資看成一場豪賭&#xff0c;Microsoft Copilot無疑是現階段最受矚目的賭注。2023年9月正式發布的Microsoft Copilot是一種基于大型語言模型&#xff08;LLM&#xff09;和微軟圖形&#xff08;Microsoft Graph&#xff09;的數據和人工智能&#xff08…

貝銳花生殼3大安全能力,保障網絡服務安全遠程連接

在沒有公網IP的情況下&#xff0c;使用內網穿透工具&#xff0c;將本地局域網服務映射至外網&#xff0c;雖然高效快捷&#xff0c;但信息安全也是不可忽略的方面。 對此&#xff0c;貝銳花生殼提供了多維度的安全防護能力&#xff0c;滿足不同場景下用戶安全遠程訪問內網服務的…