C++入门 缺省参数 & 函数重载

目录

缺省参数

1.定义

2.分类

全缺省参数

半缺省参数

函数重载 

定义

1.参数类型不同

2.参数个数不同

 3.参数类型顺序不同

原理--名字修饰

采用C语言编译器编译后结果

 采用C++编译器编译后结果


缺省参数

1.定义

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。以下代码为实例:

void Func(int a = 0)
{
 cout<<a<<endl;
}
int main()
{
 Func(); // 没有传参时,使用参数的默认值
//输出 0
   
 Func(10); // 传参时,使用指定的实参 
//输出 10  
 
 return 0;
}

2.分类

全缺省参数

全缺省参数:函数中所有参数都有一个缺省值,具体如下:

void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

半缺省参数

半缺省参数:函数中部分参数有缺省值,具体如下:

(图中 a 需要在主程序中传值。)

void Func(int a, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(如果同时出现且给定的缺省值不同,编译器无法确定使用哪个缺省值)如果想要声明和定义分离,只能在声明中出现
  3. 缺省值必须是常量或者全局变量

函数重载 

定义

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

1.参数类型不同

// 1、参数类型不同
int Add(int left, int right)
{
 cout << "int Add" << endl;
 return left + right;
}
//输出int Add


double Add(double left, double right)
{
 cout << "double Add" << endl;
 return left + right;
}
//输出double Add

2.参数个数不同

// 2、参数个数不同
void f()
{
 cout << "f()" << endl;
}
//输出f()

void f(int a)
{
 cout << "f(a)" << endl;
}
//输出uf(a)

 3.参数类型顺序不同

// 3、参数类型顺序不同
void f(int a, char b)
{
 cout << "f(int a,char b)" << endl;
}
//输出f(int a,char b)

void f(char b, int a)
{
 cout << "f(char b, int a)" << endl;
}
//输出f(char b, int a)

原理--名字修饰

为什么C++支持函数重载而C语言不支持呢?

这是由于两者的编译器不同导致的,由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使 用了g++演示了这个修饰后的名字。通过下面我们可以看出gcc的函数修饰后名字不变g++的函数修饰后变成【_Z+函数长度 +函数名+类型首字母】

采用C语言编译器编译后结果

结论:函数名字的修饰没有发生改变。

 采用C++编译器编译后结果

结论:函数名字的修饰发生改变。 

通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修 饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

注意:如果参数个数 或 类型 或 类型顺序相同,只有返回值不同不构成函数重载。

大家对函数命名有兴趣可以阅读这篇文章:C/C++ 函数调用约定,希望对你有用。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值