1.函数参数可以有默认参数
注意事项1:
//不能这么写,会报错,因为传入2个参数的时候,是给a,b还是给a,c会产生歧义
//也就是说,如果某个位置已经有了默认参数,那么从这个位置以后,从左到右都必须要有默认值
//int func2(int a, int b = 20, int c )
注意事项2:
//如果声明有了默认参数,函数实现就不能有默认参数
//运行会报错,显示重定义默认参数,因为如果
//声明:int func3(int a = 10, int b = 10);
//实现:int func3(int a = 20, int b = 20){} 编译器调用的时候就不知道默认用哪一个了
int func3(int a = 10, int b = 10); //函数声明
int func3(int a = 10, int b = 10) //函数实现
{
return a + b;
}
正确:
int func3(int a = 10, int b = 10); //函数声明
int func3(int a , int b) //函数实现
{
return a + b;
}
或者
int func3(int a , int b ); //函数声明
int func3(int a = 10, int b = 10) //函数实现
{
return a + b;
}
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
//*******1.函数参数可以又默认参数
int func(int a, int b, int c)
{
return a + b + c;
}
int func2(int a, int b = 20, int c = 30)
{
return a + b + c;
}
int main()
{
//func(10, 20);一个参数都不能扫,否则报错
cout << func(10,20,30) << endl;
cout << func2(10,30) << endl;
return 0;
}
二 函数的占位参数
函数形参列表可以有一个占位参数,但是调用的时候必须填补该位置
//*******应用二 .函数占位参数
//void fun(int a,int) 第二个int 就是一个占位,在调用这个函数的时候,即使不用,也需要随意传入一个相应的数据类型
void fun(int a,int)
{
cout << "this is fun " << endl;
}
int main()
{
fun(10, 10);
return 0;
}
三 函数重载
//函数重载的作用:函数名可以相同,提高复用性
//
//函数重载满足条件
//1.同一个作用域 下面的例子的函数都在main函数外面,属于全局作用域
//2.函/*数名称相同
//3.函数参数类型不同或者个数,或者参数顺序不同*/
void fun()
{
cout << "fun is using" << endl;
}
void fun(int a)
{
cout << " fun(int a) is using" << endl;
}
void fun(int a ,double b)
{
cout << " fun(int a ,double b) is using" << endl;
}
void fun(double b , int a)
{
cout << " void fun(double b , int a) is using" << endl;
}
//int fun(double b, int a) 函数指数返回值类型不一样是不可以实现重载的,会有歧义 ,fun(double b, int a)不给接受值,
// 就不知道调用的是void fun(double b , int a)还是 int fun(double b, int a)
//{
// cout << " void fun(double b , int a) is using" << endl;
//}
int main()
{
fun();
fun(10);
fun(10,3.14);
fun(3.14, 10);
return 0;
}
四 引用作为重载条件 以及 函数重载遇到默认参数
//*******应用四 .引用作为重载条件 以及 函数重载遇到默认参数的处理
//1 引用作为重载条件
void fun(int &a) //传10进来的,相等于 int &a = 10,是非法的,引用必须要传入一个栈区或者堆区的数据,常量是放在常量区的
{
cout << "fun(int &a) is using" << endl;
}
void fun(const int &a)
{
cout << "fun(const int &a) is using" << endl;
}
//2.函数重载遇到默认参数的处理
void func2(int a ,int b = 10)
{
cout << "func2(int a)) is using" << endl;
}
void func2(int a)
{
cout << "func2(int a)) is using" << endl;
}
int main()
{
cout << "******1 引用作为重载条件********" << endl;
// 调用的是 fun(int &a),因为a本身是一个变量,可读可写,const int &a是只读的状态
int a = 10;
fun(a);
cout << "***************" << endl;
fun(10);
cout << "******2.函数重载遇到默认参数的处理********" << endl;
//func2(10); 此调用有歧义,void func2(int a, int b = 10)。void func2(int a)都可调用,会报错,尽量避免这样的使用
return 0;
}