日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++淺析函數重載是什么_C 語言

作者:智者不如愛河 ? 更新時間: 2022-10-08 編程語言

前言

這是一個非常重要的點

函數重載:是函數的一種特殊情況,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

欄目分類
最近更新