學習狄泰軟體學院唐老師C++課程心得,文章内容來自于唐老師課件
一、C++中的函數重載
函數重載
- 用同一個函數名定義不同的函數
- 當函數名和不同的參數搭配時函數的含義不同
#include <stdio.h>
#include <string.h>
int func(int x)
{
return x;
}
int func(int a, int b)
{
return a + b;
}
int func(const char* s)
{
return strlen(s);
}
int main(int argc, char *argv[])
{
printf("%d\n", func(3));
printf("%d\n", func(4, 5));
printf("%d\n", func("D.T.Software"));
return 0;
}
3
9
12
函數重載至少滿足下面的一個條件:

#include <stdio.h>
int func(int a, int b, int c = 0)
{
return a * b * c;
}
int func(int a, int b)
{
return a + b;
}
int main(int argc, char *argv[])
{
int c = func(1, 2);
//Error] call of overloaded 'func(int, int)' is ambiguous
return 0;
}
編譯器調用重載函數的準則:
- 将所有同名函數作為候選者
- 嘗試尋找可行的候選函數
- (1)精确比對實參
- (2)通過預設參數能夠比對實參
- (3)通過預設類型轉換比對實參
- 比對失敗:
- (1)最終尋找到的候選函數不唯一,則出現二義性,編譯失敗
- (2)無法比對是以候選函數,函數未定義,編譯失敗
第八課:函數重載分析(上)
#include <stdio.h>
int add(int a, int b) // int(int, int)
{
return a + b;
}
int main()
{
printf("%p\n", add);
return 0;
}
崩潰
總結: