在我們的自然語言當中, 乙個詞在不同的情景之下可能會有多重不同的含義, 但是我們可以通過合理地判斷來確定該詞的真正含義, 這種情況, 我們可以說該詞被"過載"了.
關於函式過載的概念
函式過載其實就是函式的一種特殊的情況, 在我們的c++中允許在同一作用域當中宣告幾個功能類似的同名函式, 但是這個同名函式的形參列表(引數個數或是引數型別或是引數的順序)必須不同, 經常用來處理想要實現功能類似而資料型別不同的需求問題.
總的來說, c++允許兩個重名函式同時存在, 但是它們的引數列表不能完全相同, 哪怕是返回值的型別不同也不可以.
比如下面這樣時不允許的
#include using namespace std;
int add(short a, short b)
short add(short a, short b)
int main()
這樣的方式是不可以的, 只要這兩個同名函式的引數列表相同, 即便它們的返回值不同, 這樣的操作也是不可以的
接下來我們來看下函式過載的正確做法
#include using namespace std;
void swapargs(int * pa, int * pb)
void swapargs(float * pa, float * pb)
int main()
這樣我們就實現了乙個不同引數列表的同名函式, 這樣的功能其實為我們的操作的提供了很大的便利. 這是c語言當中無法做到的.
關於c++中的預設引數
預設引數其實是宣告或定義函式時為函式的引數指定乙個預設值.在呼叫該函式的時候, 如果沒有指定實參就會採用這個預設值, 否則的話就會使用我們傳入的實參值.
總的來說, 在c++的函式引數列表中, 能夠允許存在被賦值的引數, 這些引數具備一定的特點:
首先, 如果傳人了實參的值, 就會取傳入的值, 如果沒有傳入, 就會取函式定義時被賦予的預設值
來看例子
#include using namespace std;
void test(int a, int b = 20, int c = 30)
int main()
這樣我們傳入乙個值10,可以得到相應的結果為
再傳入乙個值試試
test(10, 200);
結果變為
再傳入乙個數
test(10, 200, 300);
結果是
其次, 這些引數必須位於引數列表的尾部, 不能穿插.
也就是說, 我們在呼叫時, 不能寫為
test(10, , 300);
這樣的形式, 即便在引數列表中是預設引數, 在傳入實參時也不可以跳過, 除非給引數位於引數列表末尾.(即 test(10, 200) 這種情況).
還有我們在編寫函式功能時, 也要注意不能寫為下面這樣
void test(int a = 10, int b, int c = 30)
void test(int a = 10, int b, int c)
等等這樣都是不被允許的.
作為引數列表中的預設引數, 必須位於引數列表的尾部,不能穿插!!
最後,被賦值的引數列表不能再宣告和定義中同時出現, 只能出現一次.
C 預設引數 函式過載
預設引數 預設引數是宣告或定義函式時為函式的引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。例void testfunc int a 0 intmain 預設引數分類 1.全預設引數 void testfunc int a 10,int b 20,int c ...
c 函式過載和預設引數
函式過載 是c 語言物件導向的特點 多型的一種表現形式 又稱為靜多型 過載的規則 1 函式名相同。2 引數個數不同,引數型別不同,引數順序不同,均可構成過載。3 僅返回值型別不同則不可以構成過載。void func int a ok void func char a ok void func int...
c 函式過載與預設引數
函式過載 是指同一作用域內,一組具有相同函式名,不同引數列表的函式,構成過載關係,這組名稱相同的函式成為過載函式。過載函式通常完成的功能相近,這樣做的好處是減少了函式名的數量,提高了程式的可讀性。注意 過載與函式的返回型別無關,引數相同僅返回值不同的兩個函式不構成過載關係,與形參名字無關,只與引數的...