【C++起飞之路】初级——缺省参数、函数重载、引用(一)

简介: 【C++起飞之路】初级——缺省参数、函数重载、引用(一)

一、缺省参数🛫


1.1 🚝什么是缺省参数

缺省参数是 声明 或 定义 函数时为函数的参数指定一个缺省值。

在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。


缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数。


👉C++中可以给函数的形参赋值:


这就是给函数的参数指定一个缺省值:

如果不进行传参,就会直接使用缺省值

如果传参,则使用传过来的参数


1.2 🚝缺省参数的分类

a. 全缺省参数

全缺省参数:所有参数都有缺省值

规律见图👆

如果要传参,传递的参数从函数第一个参数开始传递,依次传递


我们可能要问了,如果我只想传递第二个参数(跳过前面的参数直接传后面的),行不行呢?

比如:

当然是错误的,全缺省传参的时候必须从左往右连续的传,不能 “跳着” 传 !


b. 半缺省参数(部分缺省参数)

半缺省参数:函数中的所有参数从最右边往左连续地缺省一部分(当然也可以省一个)


省了,但没完全省

举个栗子:

错误①

部分缺省时就不能不传参了


错误②:


函数中的所有参数从最右边往左连续地缺省

不可以从除倒数第一个参数以外的参数开始缺省:


正确用法:



1.3 🚝注意事项

半缺省参数必须从右往左依次来给出,不能间隔着给

缺省参数不能在函数声明和定义中同时出现

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

C++可以,但是C语言不支持(编译器不支持)

注意第二点:如果声明与定义中同时缺省,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值


在声明时给缺省值,定义的时候不能给


二、函数重载🛫


—— “一词多义” ,即一个函数有多个 “ 意思 ”


2.1 🚝什么是函数重载

定义:如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载( overloaded )函数。


函数重载是函数的一种特殊情况


C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表( 参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题


注意:

①函数重载不能只有函数返回值类型不同

②main函数不能重载


2.2 🚝演示

比如下面我们定义几个Print函数:


这些函数接受的形参类型不一样,但是执行的操作类似。功能相同


当调用这些函数时,编译器会根据传递的实参类型 推断想要的是哪个函数:


👉函数的名字仅仅是让编译器知道它调用的是哪个函数


而函数重载可以在一定程度上减轻程序员给函数起名字、记名字的负担。


2.3 🚝用法注意事项

a) 不能只有返回值类型不同


b) 类型顺序相同,形参名字不同不构成函数重载

要求类型的顺序不同,不是形参名字的顺序


比如:

到底应该调用哪一个?

无法确定!

会产生歧义


c) 相同类型数据,顺序不同不构成函数重载

与b)类似


b)、c)归结起来就是:形参的名字仅仅起到帮助记忆的作用,有没有它并不影响形参列表的内容


像这样不写形参的名字也是编的过的:


2.4🚝 const 形参

顶层const不影响传入函数的对象。


一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来


比如:


第二行重复声明了int Add(int a);


第6行重复声明了int Add(int* a);


在这两组函数声明中,每一组的第二个声明和第一个声明是等价的

相关文章
|
29天前
|
编译器 程序员 C语言
C++函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: void swap1(int *a, int *b); //交换 int 变量的值 void swap2(float *a, float *b); //交换 float 变量的值 void swap3(char *a, char *b); //交换 char 变量的
16 4
C++函数重载
|
29天前
|
编译器 Linux C语言
【C++小知识】为什么C语言不支持函数重载,而C++支持
【C++小知识】为什么C语言不支持函数重载,而C++支持
|
1月前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
24 5
|
1月前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
33 4
|
2月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
22 3
|
2月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
2月前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。
|
2月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
8天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
8天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。