c++函式過載實現是依據函式名和引數列表實現的,與返回值沒有關係。其中函式的引數列表又稱函式特徵標。如果兩個函式的引數列表數目和型別相同,同時引數的排列順序也相同,則他們的特徵標相同,而變數名是無關緊要的。c++允許定義名稱相同的函式,條件是他們的特徵標不同。
特徵標不同情況:
#include #include using namespace std;
void func(int a, int b); //#1
void func(int a, char b); //#2
int main(void)
void func(int a, int b)
void func(int a, char b)
#include #include using namespace std;
void func(int a); //#1
void func(int a, int b); //#2
int main(void)
void func(int a)
void func(int a, int b)
2.3.1**一#include #include using namespace std;
void func(int a, float b); //#1
void func(float b, int a); //#2
int main(void)
void func(int a, float b)
void func(float b, int a)
2.3.2**二#include #include using namespace std;
void func(int a, int b, char c); //#1
void func(int a, char c, int b); //#2
int main(void)
void func(int a, int b, char c)
void func(int a, char c, int b)
#include #include using namespace std;
void func(float a); //#1
void func(double a); //#2
int main(void)
void func(float a)
void func(double a)
說明:c++預設浮點數都是double型別,同理int的short、long、long long型別在傳入引數後面加上字尾即可
c++如何跟蹤每乙個過載函式呢?它給這些函式指定了秘密身份。使用c++開發工具中的編譯器編寫和編譯程式時,c++編譯器將執行一些神奇的操作——名稱修飾或名稱矯正,它根據函式原型中指定的形參型別對每個函式名進行加密,請看下述未經修飾的函式原型:
long myfunctionfoo(int, float);
這種格式對於人類來說很合適,我們知道函式接受兩個引數(乙個為int型。另乙個為float型),返回乙個long值。而編譯器將名稱轉換為不太好看的內部表示來描述該介面,如下所示:
?myfunctionfoo@@yaxh
對原始名稱進行的表面看來無意義的修飾(或矯正)將對引數數目和型別進行編碼。新增的一組符號隨函式特徵標而異,而修飾時使用的約定隨編譯器而定。
mysql 函式過載 C 方法過載(函式過載)
在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...
C 函式 函式過載
如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...
C 函式過載
函式過載 overloaded function 在相同的作用域中的兩個函式,如果有相同的名字而形參表不同 注意 如果僅僅函式的返回值不同是不能實現函式過載 void func int int func int error,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...