C++函數提高
1.函數的默認參數
在C++中,函數的形參列表中的形參是可以有默認值的。
語法:返回值類型 函數名 (參數 = 默認值){}
#include<iostream>
using namespace std;
/*
函數的默認參數
如果我們自己傳入數據,就用自己的數據,如果沒有,那麼用默認值。
語法:返回值類型 函數名 (形參 = 默認值){}
注意事項:1.如果某個位置已經有了默認值,那麼從這個位置往後,從左到右都必須有默認值
2.如果函數聲明有默認參數,函數實現就不能有默認參數
*/
int func1(int a, int b = 20, int c = 10)
{
return a + b + c;
}
/*
1.如果某個位置已經有了默認值,那麼從這個位置往後,從左到右都必須有默認值
int func2(int a, int b = 20, int c ) //默認實參不在形參列表結尾
{
return a + b + c;
}
*/
/*2.如果函數聲明有默認參數,函數實現就不能有默認參數
聲明和實現都只能有一個默認參數
int func3(int a = 10, int b = 20);
int func3(int a, int b )
{
return a + b ;
}
*/
int main()
{
cout << func1(10, 30) << endl;
system("pause");
return 0;
}
2.函數的佔位參數
C++中函數的形參列表裏可以有佔位參數,用來做佔位,調用函數時必須填補該位置
語法:返回值類型 函數名(數據類型){ }
/*佔位參數*/
//返回值類型 函數名 (數據類型){ }
//佔位參數,還可以有默認參數
void func(int a,int)
{
cout << "this is funs" << endl;
}
int main()
{
func(10,10);
system("pause");
return 0;
}
3.函數重載(基本語法)
作用:函數名可以相同,提高複用性
函數重載滿足條件:
1.同一個作用域下
2.函數名稱相同
3.函數參數類型不同 或者 個數不同 或者 順序不同
#include<iostream>
using namespace std;
/*函數重載*/
//可以讓函數名相同,提高複用性
/*
函數重載滿足條件:
1.同一個作用域下
2.函數名稱相同
3.函數參數類型不同 或者 個數不同 或者 順序不同
*/
void func()
{
cout << "func 的調用" << endl;
}
void func(int a)
{
cout << "func(int a) 的調用" << endl;
}
void func(double a)
{
cout << "func(double a) 的調用" << endl;
}
void func(int a,double b)
{
cout << "func(int a,double b) 的調用" << endl;
}
void func(double a, int b)
{
cout << "func(double a, int b) 的調用" << endl;
}
int main()
{
func();
func(10);
func(3.13);
func(2,3.13);
func(2.23 , 3);
system("pause");
return 0;
}
4.函數重載(注意事項)
引用作爲重載條件
函數重載碰到函數默認參數
#include<iostream>
using namespace std;
/*
函數重載注意事項:
1.引用作爲重載的條件
*/
void func(int &a) //int &a = 10;不合法
{
cout << "func(int &a) 的調用" << endl;
}
void func(const int& a) //const int &a =10; 合法
{
cout << "func(const int &a) 的調用" << endl;
}
//2.函數重載碰到默認參數
void func2(int a, int b =10)
{
cout << "func2(int a, int b)的調用" << endl;
}
void func2(int a)
{
cout << "func2(int a)的調用" << endl;
}
int main()
{
// int a = 10;
// func(a);
// func(10);
func2(13); //當函數重載碰到默認參數,會出現二義性,報錯,儘量避免出現此類情況
system("pause");
return 0;
}