【C++初阶】缺省参数与函数重载

简介: 【C++初阶】缺省参数与函数重载

 

 


一.缺省参数

C++祖师爷在用C写代码的时候,就觉得有些地方用着很不方便,于是就在C++设计了缺省参数,在实现一些功能时,用这个就方便了许多。

1.概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时:

   

     a.如果没有指定实参则采用该形参的缺省值;

     b.否则使用指定的实参。

例:

2.分类

a.全缺省参数:函数的所有参数都是缺省参数。

1. //全缺省参数
2. void func(int a=10,int b=20)
3. {
4. return a+b;
5. }
6.

b.半缺省参数:函数的部分参数是缺省参数,并不是非得有一半是缺省参数

1. //半缺省参数
2. void func(int a,int b=20,int c=10)
3. {
4. return a+b+c;
5. }

3.注意

a.缺省参数是从右往左,所以不能隔着给

b.函数传参从左往右,所以不能跳着传参

c.函数的声明和定义不能同时出现缺省参数,只能在声明出现,定义不能出现

d.缺省值必须是常量或是全局变量


二.函数重载

先来讲讲重载在生活中的例子。

简单来说就是一个词的不同意思,我们来看一个笑话吧:

           国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!

同一词”谁也赢不了“,表达的却是不同的意思,这就是重载

1.概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名数

特点:

         a.同名

         b.参数的类型,个数,类型顺序不同

        c.与返回值是否相同无关

注意:函数中有缺省参数也可以认为是函数重载

例:

1. void func()
2. {
3.     cout << 1 << endl;
4. }
5. 
6. void func(int a = 10)
7. {
8.     cout << 10 << endl;
9. }
10. 
11. //但这种情况要注意,如果这样调用函数:func(),就会报错

如果使用不当,会造成这个错误:

注意以下情形并不构成函数重载

1. int add(int a, int b)
2. {
3. return a + b;
4. }
5. 
6. int add(int b, int a)
7. {
8. return a + b;
9. }

至于为什么不构成,这就涉及到函数重载的原理了,下面让我们一起来看看函数重载的原理吧。

2.C++支持函数重载的原理

C++编译器中,调用函数时,不是直接用函数名,而是会对函数名进行修饰,根据修饰后的调用函数。而C编译器并不会对函数进行修饰,它是直接用函数名来调用函数的,所以C不支持函数重载。

所以上述不构成函数重载的情形就得到了解释。

不同环境下的修饰规则不同,vs的较为复杂,这里以Linux的修饰规则为例

Linux的修饰规则

_Z+函数名的长度+函数名+参数类型的第一个字母

1. void  func(int a,double b);
2. //Linux环境下修饰后的:_Z4funcid

🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼


目录
相关文章
|
5天前
|
编译器 C语言 C++
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
13 1
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
|
5天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-3
c++初阶------类和对象(六大默认构造函数的揭破)
|
5天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-2
c++初阶------类和对象(六大默认构造函数的揭破)
|
5天前
|
存储 编译器 C语言
c++初阶-------类和对象-2
c++初阶-------类和对象
|
5天前
|
安全 编译器 C语言
C++初阶------------------入门C++(三)
C++初阶------------------入门C++(三)
|
5天前
|
存储 Linux 编译器
C++初阶------------------入门C++(二)
C++初阶------------------入门C++(二)
|
5天前
|
编译器 C语言 C++
C++初阶------------------入门C++(一)
C++初阶------------------入门C++(一)
|
5天前
|
编译器 C语言 C++
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
23 0
|
5天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
19 0
|
3天前
|
测试技术 C++
C++|运算符重载(3)|日期类的计算
C++|运算符重载(3)|日期类的计算