函式過載實現原理
編譯器為了實現函式過載,也是預設為我們做了一些幕後的工作,編譯器用不同的引數型別來修飾不同的函式名,比如void func(); 編譯器可能會將函式名修飾成_func,當編譯器碰到void func(int x),編譯器可能將函式名修飾為_func_int,當編譯器碰到void func(int x,char c),編譯器可能會將函式名修飾為_func_int_char我這裡使用」可能」這個字眼是因為編譯器如何修飾過載的函式名稱並沒有乙個統一的標準,所以不同的編譯器可能會產生不同的內部名。
void func(){}
void func(int x){}
void func(int x,char y){}
以上三個函式在linux下生成的編譯之後的函式名為:
_z4funcv //v 代表void,無引數
_z4funci //i 代表引數為int型別
_z4funcic //i 代表第乙個引數為int型別,第二個引數為char型別
實現函式過載的條件:
同乙個作用域
引數個數不同
引數型別不同
引數順序不同
#define _crt_secure_no_warnings
#includeusing namespace std;
//函式過載
// c++中 函式名稱可以重複
// 必須在同乙個作用域,函式名稱相同
// 函式的引數 個數不同 或者 型別不同 或者 順序不同
void func()
void func(int a )
void func(double a)
void func(double a , int b)
void func(int a, double b)
//返回值可以作為函式過載的條件嗎??? 不可以
//int func(int a, double b)
//void test01()
//當函式過載 碰到了 預設引數時候,要注意避免二義性問題
void func2(int a,int b = 10)
void func2(int a)
void test02()
//引用的過載版本
void func3(int &a) //引用必須要引合法的記憶體空間
void func3(const int &a) //const也是可以作為過載的條件 int tmp = 10; const int &a = tmp;
void test03()
int main()
29 類中的過載函式
函式過載的本質為相互對立的不同函式。c 中通過函式名和函式引數確定函式呼叫,無法直接通過函式名得到過載函式的入口位址,函式過載必然發生在同乙個作用域中。類中的成員函式可以進行過載 建構函式的過載,普通函式的過載,靜態成員的過載。靜態成員函式和普通成員函式能夠成過載,類的成員函式能夠成過載。inclu...
29 類中的函式過載
1 函式過載的本質為相互獨立的不同函式 2 c 中通過函式名和函式引數確定函式呼叫,函式名和引數列表組成唯一的標識 3 無法直接通過函式名得到 過載函式的入口位址 過載函式的入口位址不同 4 函式過載必然發生在同乙個作用域 乙個類內部 程式設計實驗 類成員函式指標 include using nam...
C 29 類中的函式過載
類中的成員函式可以進行過載 問題 全域性函式,普通成員函式以及靜態成員函式直接是否可以構成過載?class test test int i test const test obj static void func void func int i int geti void func void fun...