網站首頁 編程語言 正文
前言
這是一個非常重要的點
函數重載:是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數。
這些同名函數的 形參列表(參數個數 或 類型 或 順序)必須不同,常用來處理實現功能類似數據類型不同的問題
或者說,給一個名字賦予第二層意義,一詞多義,有點內涵那意思
函數重載
首先C語言不允許定義同名的函數,但是C++可以,原因就涉及到了函數重載
函數重載的要求:函數名相同,參數不同(參數類型不同,參數個數不同)
例子:
定義三個函數名相同的函數,在C++中可以構成函數重載
這三個函數的函數名一樣,但是類型不同
int ADD(int left, int right) {
return left + right;
}
double ADD(double left, double right) {
return left + right;
}
long ADD(long left, long right) {
return left + right;
}
它們的類型分別是int,double,long。
而且個數不同也能構成函數重載。
下面來打印玩一下(剛開始玩打印很正常,但是工作中很少用)
int main(void) {
cout << ADD(1,2) << endl;
cout << ADD(1.2, 2.2) << endl;
cout << ADD(40l, 40l) << endl;
return 0;
}
結果:
感覺是調用的是一個函數,但其實不止一個,因為這個函數被重載了,所以有三層定義。
實際上調用的是
1:int類型的
2:double類型的
3:long類型的。
一些其他問題
缺省算不算重載 ?
//NO.1
int ADD(int left, int right) {
return left + right;
}
//NO.2
int ADD(int left = 1, int right = 2) {
return left + right;
}
注意 : NO.1和NO.2兩個不算重載,因為構成重載的條件是參數的類型不同或者個數不同,以上均不滿足 。重載只看類型
但是
//NO.2
int ADD(int left = 1, int right = 2) {
return left + right;
}
//NO.3
double ADD(double left, double right) {
return left + right;
}
NO.2和NO.3是構成重載的,因為滿足了重載的條件
函數重載的要求:函數名相同,參數不同(參數類型不同,參數個數不同)
綜上所述,缺省和重載沒有關系!
2.1 int和char怎么區分
int ADD(int left = 10, int right = 20) {
return left + right;
}
char ADD(char left, char right) {
return left + right;
}
int main() {
cout << ADD() << endl;
//cout << ADD(1,2) << endl; //(1,2)字面量常量,
//默認給十進制,十六進制等等,給的整形默認算常量
//如果調用char
cout << ADD('1', '2') << endl; //char類型打印,自動按%c,字符類型→ → → → → ↓
//傳字符才調用char類型的 ↓
// ↓
//char類型的字符只是顯示表面,深入剖析的話在內存中,它存儲在4byte中,是它對應的ASCII碼值 ↓
//ASCII碼值還是整形,只不過是1byte ↓
//char類型存的值是‘49',‘50'. ← ← ← ← ← ← ← ← ← ← ← ← ← ←
//對應的是c。c在ASCII碼值中是99 ← ← ← ← ← ← ← ← ← ← ← ← ← ←
return 0;
}
總結:
1.char和int都是表示整形的,整形一般都是用來表示大小,只不過int是4byte,char是1byte
2.char的1byte是用來表示ASCII碼值的字母,多個字母可以表示英文,就能表示文字了
2.2 傳值
有三個值,但是缺省了一個,傳的時候只傳了兩個
void lost(int a, int b, int c = 1) {
}
void lost(int a, int b) {
}
//以上構成函數重載,函數名相同,參數或者個數不同
int main() {
lost(1, 2, 3);
lost(1,2);
//↑是編不過去的,
return 0;
}
總結:
1. 有多個重載函數“lost”實例與參數列表匹配
2. 編譯器不能識別要調用哪一個“lost”對重載函數的調用不明確
3. 構成重載但是調用的時候埋了一個坑
原文鏈接:https://blog.csdn.net/W20223161730/article/details/126253739
相關推薦
- 2023-02-26 Golang時間處理中容易踩的坑分析解決_Golang
- 2023-01-30 Numpy?np.array()函數使用方法指南_python
- 2022-12-12 flutter?InheritedWidget使用方法總結_Android
- 2022-01-27 插入數據庫某個字段之前判斷是否重復
- 2023-10-14 uniapp在Android 10對公共目錄的非媒體文件讀取上傳失敗問題
- 2022-08-06 .Net?Core中使用EFCore生成反向工程_實用技巧
- 2022-04-23 簡單易懂的二叉樹詳解,你確定不來看看嗎
- 2022-09-08 pytorch中Tensor.to(device)和model.to(device)的區別及說明_p
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支