您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++函數與重載知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++函數與重載知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
c++在聲明函數原型的時可為一個或者多個參數指定默認(缺省)的參數值,當函數調用的時候如果沒有傳遞該參數值,編譯器會自動用默認值代替。
//函數的默認參數 指定x的默認值為10 y為20 int my_add(int x=10,int y=20) { return x+y; } void test02() { //如果函數傳參 那么各自的默認參數將無效 cout<<"my_add = "<<my_add(100,200)<<endl;//300 //如果某個參數未被傳參 將啟用默認值x=100 y使用默認值20 cout<<"my_add = "<<my_add(100)<<endl;//120 //x=10 y=20 cout<<"my_add = "<<my_add()<<endl;//30 }
(1)、函數的默認參數從左向右,如果一個參數設置了默認參數,那么這個參數之后的參數都必須設置默認參數
//函數的默認參數從左向右 int func01(int x,int y=20,int z=30) { return x+y+z; } void test03() { cout<<func01(100,200)<<endl;//330 cout<<func01(100)<<endl;//150 //cout<<func01()<<endl;//err x沒有設置默認參數 必須傳參 }
int fun(int a, int b, int c=10);//正確 int fun(int a, int b=20, int c=10);//正確 int fun(int a=30, int b=20, int c=10);//正確 int fun(int a, int b=20, int c);//不正確
(2)、如果函數聲明和函數定義分開寫,函數聲明和函數定義不能同時設置默認參數
(3)、默認參數一般在函數聲明的時候 設置
fun.cpp
int func02(int x,int y,int z) { return x+y+z; }
main.cpp
//分文件 函數定義處的默認參數 是無效的 //建議:分文件是 在聲明 給默認參數 extern int func02(int x,int y=25,int z=35); //extern int func02(int x,int y,int z);//err void test04() { cout<<func02(100,200)<<endl;//335 cout<<func02(100)<<endl;//160 }
c++在聲明函數時,可以設置占位參數。
占位參數只有參數類型聲明,而沒有參數名聲明。
如果函數的參數只有類型名 沒有形參名,這個參數就是占位參數
注意:
由于有類型名 所以 函數調用的時候 必須給占位參數傳參。
由于沒有形參名 所以 函數內部 是無法使用占位參數。
void func03(int x,int y,int) { cout<<"x = "<<x<<", y = "<<y<<endl; return; } void test05() { //func03(10,30,"hehe");//err "hehe"和int類型不符 func03(10,30,40); }
void TestFunc01(int a,int b,int=100) { //函數內部無法使用占位參數 cout << "a + b = " << a + b << endl; } TestFunc01(10, 20,30);//ok TestFunc01(10, 20);//ok
什么時候用,在后面我們要講的操作符重載的后置++要用到這個
函數重載體現了 c++ 的多態的特性
函數重載:同一個函數名在不同場景下可以具有不同的含義。
函數重載意義:方便的使用函數名。
函數重載的條件: 同一個作用域 參數個數不同 參數類型不同 參數順序不同(重要)
void myFunc(int a) { cout<<"int的myFunc"<<endl; } void myFunc(int a,int b) { cout<<"int,int 的myFunc"<<endl; } void myFunc(int a,double b) { cout<<"int , double的myFunc"<<endl; } void myFunc(double a,int b) { cout<<"double,int的myFunc"<<endl; } void test06() { myFunc(10);//int myFunc(10,20);//int int myFunc(10,20.2);//int double myFunc(10.1,20);//double int }
注意:
1、函數的返回值類型 不能作為 函數重載的依據。
2、函數重載和默認參數一起使用,需要額外注意二義性問題的產生
void myFunc02(int a) { cout<<"int的myFunc02"<<endl; } void myFunc02(int a,int b=10)//默認參數 { cout<<"int,int 的myFunc02"<<endl; } void test07() { //myFunc02(int a) 和 myFunc02(int a,int b=10)都能識別 myFunc02(10);//二義性產生 }
3、函數重載的原理(了解)
讀到這里,這篇“C++函數與重載知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。