網站首頁 編程語言 正文
一、缺省參數
缺省參數形象來說就是"備胎"。
1.1缺省參數概念
缺省參數是聲明或定義函數時為函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則采用該默認值,否則使用指定的實參。
#include<iostream>
void P(int a = 3)
{
printf("%d", a);
}
int main()
{
P();//打印默認值 3
P(1);//打印傳送的值 1
return 0;
}
1.2缺省參數分類
1.全缺省參數
void P(int a = 3,int c = 1,int b = 2)
{
printf("%d", a);
printf("%d", b);
printf("%d", c);
}
二、函數重載
2.1函數重載概念
函數重載:是函數的一種特殊情況,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 main()
{
Add(10, 20);
Add(10.0, 20.0);
Add(10L, 20L);
return 0;
}
觀察上方的函數,我們會發現他們的函數名相同,參數不同(參數類型,參數順序等)只有滿足上述條件就可以進行函數重載
注意:返回類型的不同的函數并不能進行函數重載!
double Add(double left, double right)
{
return left+right;
}
long Add(double left, double right)
{
return left+right;
}
這就是錯誤的函數重載
2.2名字修飾
這里我們思考個問題,為什么C++支持函數重載而C語言卻不支持呢?
在C/C++中,一個程序要運行起來,需要經歷以下幾個階段:預處理、編譯、匯編、鏈接
1.實際我們的項目通常是由多個頭文件和多個源文件構成,例如在(t.cpp中調用了f.cpp中的函數add)時,在鏈接前,t.o文件都沒有f.o中的add函數地址,
2.所以鏈接階段就是為了解決這個問題的,鏈接器看到t.o調用add,但是沒有add的地址,就會到f.o的符號表中找add的地址,然后鏈接到一起。
3.在鏈接時,每個編譯器的函數名修改規則的不一樣,就有可能導致鏈接的不同,如在gcc的編譯器下的函數修飾后名字不變。而g++的函數修飾后變成【_Z+函數長度+函數名+類型首字母】。
4.C++支持函數重載而C卻不支持函數重載的原因是:C語言同函數名時無法區分,而C++可以同過函數參數的不同來區別同名的函數!
原文鏈接:https://blog.csdn.net/bitezz/article/details/124566094
相關推薦
- 2022-07-18 Linux文件權限
- 2022-05-14 .NetCore?Web?Api?利用ActionFilterAttribute統一接口返回值格式及
- 2022-08-23 Python?Pandas數據處理高頻操作詳解_python
- 2023-03-28 Python?獲取當前路徑3種方法_python
- 2022-05-22 Docker容器之間數據傳輸的實現_docker
- 2022-11-17 React中實現插槽效果的方案詳解_React
- 2023-01-12 C#實現讀寫ini配置文件的方法詳解_C#教程
- 2022-12-05 如何在React中直接使用Redux_React
- 最近更新
-
- 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同步修改后的遠程分支