【C++基础二】缺省参数和函数重载

1.缺省参数

缺省参数是声明或定义函数时,为函数的参数指定一个缺省值,在调用该函数时,若没有指定的实参,则采用该形参的缺省值,否则使用指定的实参

1.1全缺省

全缺省:函数的所有参数都给缺省值

void Func(int a = 10, int b = 20, int c = 30)
{
    
    
	//。。。。。。
}

调用全缺省参数的四种方式:

  1. 不传参:
Func();

a = 10 , b = 20 , c = 30

  1. 只传一个参数:
Func(1);

a = 1 , b = 20 , c = 30

  1. 传两个参数:
Func(1,2);

a = 1 , b = 2 , c = 30

  1. 传三个参数:
Func(1,2,3);

a = 1 , b = 2 , c = 3

注:

传参只能依次传参 ,不能写成以下形式:

Func(,2,);
Func(,,3);
Func(,2,3);
Func(1,,3);

1.2半缺省

半缺省:有参数没给缺省值,那它就是半缺省的

void Func(int a, int b = 2, int c = 3)
{
    
    
	//。。。。。。
}
  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(一般在函数声明时给缺省参数)
  3. 缺省值必须是常量或者全局变量
//这样都是不行的,缺省值的右侧参数必须都有缺省值
void Func1(int a=1,int b,int c);
void Func2(int a,int b=2,int c);

2.什么是函数重载

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 / 类型 / 类型顺序)不同,常用来处理实现功能类似但数据类型不同的情况

void Func(int i,char c) //函数1
{
    
    
	//...
}

void Func(char c,int i) //函数2
{
    
    
	//...
}

两个Func函数虽然重名,但可以同时存在,并且两个Func函数是不同的函数

3.不同类型的函数重载

  1. 参数类型不同:
int Add(int L, int R)
{
    
    
	return L + R;
}

double Add(double L, double R)
{
    
    
	return L + R;
}
  1. 参数个数不同:
void Func()
{
    
    
	cout << "f()" << endl;
}

void Func(int a)
{
    
    
	cout << "f(int a)" << endl;
}
  1. 参数类型的顺序不同:
void Func(int i,char c) 
{
    
    
	cout << "共赴重霄九九难" << endl;
}

void Func(char c,int i) 
{
    
    
	cout << "得人再书十十回" << endl;
}

不是函数重载的情况:

参数类型相同,数量相同,类型顺序相同
只有返回值不同的情况下不属于函数重载

short Add(short x,short y)
{
    
    
	return x + y;
}

int Add(short x,short y)
{
    
    
	return x + y;
}

只有函数名不同,也不属于函数重载

void fun(int i, int ch)
{
    
    

}

void fun(int  ch, int i)
{
    
    

}

4.为什么C++支持函数重载而C语言不支持

打开LInux,创建一个test.c文件,vim进去按i插入内容如下,esc键退出插入模式,同时按shift和:键,在输入wq保存并退出

void Func(int a,int b)
{
    
    

}

int main()
{
    
    
	return 0;
}

输入指令:gcc test.c -o mybin生成可执行C语言程序mybin
再输入指令:objdump -S mybin即可查看以下mybin程序的汇编语言

可以看到C语言执行程序时,是按照函数本名去寻找Func函数

在这里插入图片描述

删掉mybin程序,输入指令g++ test.c -o mybin重新将test.c变成可执行**C++**程序
再输入指令:objdump -S mybin即可查看以下mybin程序的汇编语言
在这里插入图片描述

可以看到<_Z4Funcii>中,4是函数名长度,ii分别是是函数两个参数的类型缩写,C++是通过这样蕴含信息的名字来寻找函数的,所以能使用函数重载

猜你喜欢

转载自blog.csdn.net/2201_75570391/article/details/146161630