文章目錄
- 1. 函數的默認參數
- 2. 函數占位參數
- 3. 函數重載
- 4. 注意事項
1. 函數的默認參數
在C++中,函數的形參列表中的形參是可以有默認值的
//語法: 返回值類型 函數名 (參數 = 默認值){}
#include<iostream>
using namespace std;
//函數默認參數
//如果我們自己傳入數據,就用自己的數據,如果沒有,那么用默認值
int func(int a, int b = 20, int c = 30)//給形參賦予默認值
{return a + b + c;
}
//注意事項
//1.如果某個位置已經有了默認參數,那么從這個位置往后,從左到右都必須有默認值
//void func(int a = 10, int b) 是錯誤的
//{
// return a + b;
//}
//2.如果函數聲明有默認值,函數實現就不能有默認參數
//聲明和實現只能有一個有默認參數
//int func(int a = 10, int b = 10);//函數聲明
//int func(int a = 20, int b = 20)//函數實現
//{
// return a + b;
//}
int main()
{cout << func(10, 30) << endl;system("pause");return 0;
}
注意事項:
如果我們自己傳入數據,就用自己的數據,如果沒有,那么用默認值
1.如果某個位置已經有了默認參數,那么從這個位置往后,從左到右都必須有默認值
2.如果函數聲明有默認值,函數實現就不能有默認參數
//聲明和實現只能有一個有默認參數
2. 函數占位參數
C++函數的形參列表中可以有占位參數,用來做占位,調用函數時必須填補該位置
//語法: 返回值類型 函數名 (數據類型){}
//在現階段函數的占位參數存在意義不大,但是后面的課程中會用到該技術
//就像在餐桌占位,人不在,留下書包
#include<iostream>
using namespace std;
//占位參數 占位參數還可以有默認參數
void func(int a, int)
{cout << "this is func" << endl;
}
int main()
{func(10, 10);system("pause");return 0;
}
3. 函數重載
函數名可以相同,提高復用性
函數重載滿足條件:
//1.同一個作用域下
//2.函數名稱相同
//3.函數參數類型不同 或者個數不同 或者順序不同
//注意:函數的返回值不可以作為函數重載的條件
#include<iostream>
using namespace std;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(double a,int b)
{cout << "func(double a,int b)的調用" << endl;
}void func(int a,double b)
{cout << "func(int a,double b)的調用" << endl;
}//注意:函數的返回值不可以作為函數重載的條件
int func(int a, double b) //int和void返回值不同,返回值不能作為條件
{cout << "func(int a,double b)的調用" << endl;
}int main() {func();func(10);func(1.1);func(10, 3.14);func(3.14, 10);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()
{//func(10);func2(10);//當函數重載遇到默認參數,出現二義性,報錯,盡量避免這種情況//當func(10,10)有兩個參數時不會報錯,一個參數時會報錯system("pause");return 0;
}