一、函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的
语法:
返回值类型 函数(参数=默认值){}
#include<iostream>
#include<string.h>
using namespace std;
//函数参数默认值
//
//如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
//语法: 返回值类型 函数名(形参 =默认值){}
int func(int a, int b = 20, int c = 30)
{
return a + b + c;
}
//注意事项
//1、如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
//int func2(int a, int b=10, int c) //错误,因为b赋值为10,c也得进行赋值
//{
// return a + b + c;
//}
//2、如果函数声明有默认参数,函数实现就不能有默认参数
//int func2(int a, int b = 20); //实现中b赋值了,则函数体内参数不能赋值
int func2(int a, int b = 20)
{
return a + b;
}
int main()
{
func(10, 20, 30);
cout << func(10) << endl; //函数中func已经给形参赋值两个,所以调用函数时候只需赋值一个即可
cout << func(10,30) << endl; //调用时会按照顺序重新进行赋值
//func2(10, 20); //错误,如果函数声明有默认参数,函数实现就不能有默认参数
system("pause");
return 0;
}
运行结果:
60
70
二、函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:
返回值类型 函数名(数据类型){}
在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术
#include<iostream>
#include<string.h>
using namespace std;
//占位参数
//目前阶段的占位参数 我们还用不到,后面课程中会用到
void func(int a,int)
//第二个int相当于占位参数,main函数中调用该函数时必须传递两个实参
//占位参数 还可以有默认参数
{
cout << "this is func" << endl;
}
int main()
{
func(10,10); //调用函数
system("pause");
return 0;
}
运行结果:
this is func
三、函数重载
函数重载概述
作用:函数名可以相同,提高复用性
函数重载满足条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同 或者 个数不同 或者 顺序不同
注意:函数的返回值不可以作为函数重载的条件
#include<iostream>
#include<string.h>
using namespace std;
//函数重载
//可以让函数名相同,提高复用性
//函数重载的满足条件
//1、同一个作用域下
//2、函数名相同
//3、函数参数类型不同,或者个数不同,或者顺序不同
void func()
//第二个int相当于占位参数,main函数中调用该函数时必须传递两个实参
{
cout << "func 的调用" << endl;
}
void func(int a)
//第二个int相当于占位参数,main函数中调用该函数时必须传递两个实参
{
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 func(double a, int b) //int func可以被func(10, 3.14);调用但不输出
{
cout << "func(double a, int b) 的调用" << endl;
}
int main()
{
func(); //调用第一个func函数
func(10); //因为函数类型符合第二个void func(int a)故调用第二个函数
func(3.14);
//顺序不同
func(10, 3.14); //调用func(int a, double b)
func(3.14, 10); //调用func(double a, int b)
system("pause");
return 0;
}
运行结果:
func 的调用
func(int a) 的调用!
func(double a) 的调用
func(int a, double b) 的调用
func(double a, int b) 的调用
四、函数重载注意事项
引用作为重载条件
函数重载碰到函数默认参数
#include<iostream>
#include<string.h>
using namespace std;
//函数重载的注意事项日
//1、引用作为重载的条件
void func(int &a) //int a = 10; 不合法
{
cout<<"func(int &a)调用"<<endl;
}
void func(const int &a)
{
cout << "func(const int &a)调用" << endl;
}
//2、函数重载碰到默认参数
void func2(int a)
{
cout<<"func2(int a)的调用"<<endl;
}
int main()
{
/*int a = 10;
func(a);*/ //func(int &a)调用
//func(10);
func2(10);
system("pause");
return 0;
}