【C++初阶(二)】缺省参数以及函数重载(上)

简介: 【C++初阶(二)】缺省参数以及函数重载

💓博主CSDN主页:杭电码农-NEO💓


⏩专栏分类:C++初阶之路


🚚代码仓库:NEO的学习日记🚚


🌹关注我🫵带你学习排序知识

  🔝🔝



1. 前言

写C语言代码的时候
特别是在写数据结构时:

经常忘记传函数的参数
或者当前不需要什么参数

C++增加了缺省参数来解决这个问题

而为了解决相似功能的函数的函数名问题

C++增加了函数重载来解决这个问题

本篇文章将简单介绍缺省参数
并着重讲解函数重载的底层原理!


2. 缺省参数

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

则采用该形参的缺省值

否则使用指定的实参

缺省参数分类:

  1. 全缺省
  2. 半缺省

2.1 全缺省

类似于这样的代码:

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

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

有四种调用此函数的方式:

  1. 什么都不传:
Func();

此时系统默认a,b,c的值分别为

10 - 20 - 30

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

此时,a的值为15
而系统默认b,c的值为:20-30

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

此时a,b的值为:15 - 25

系统默认c的值为30

  1. 三个参数都传:
Func(15,25,35);

此时a,b,c的值为:15-25-35


注意: 传参不能写成这种形式:

Func(,25,);
Func(,,35);
Func(,25,35);
Func(15,,35);

2.2 半缺省

半缺省类似于这种形式:

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

只要有参数没有给缺省值
那么它就是半缺省的

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现
  3. 缺省值必须是常量或者全局变量

比如下面这样定义半缺省是不行的:

void Func1(int a=10,int b,int c);
void Func2(int a,int b=20,int c);
//有缺省值的前提是它的右边的参数都有缺省值

3. 函数重载概念

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

这里使用了一语双关.
而函数重载的概念和它类似:

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

举个例子:

void func(int i,char ch) //函数1
{
  //...
}
void func(char ch,int i) //函数2
{
  //...
}

函数1和2可以同时存在
并且它们不是同一个函数


相关文章
|
6天前
|
编译器 程序员 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 变量的
13 4
C++函数重载
|
6天前
|
编译器 Linux C语言
【C++小知识】为什么C语言不支持函数重载,而C++支持
【C++小知识】为什么C语言不支持函数重载,而C++支持
|
11天前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
18 5
|
11天前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
25 4
|
1月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
2月前
|
存储 编译器 C++
【C++ 初阶路】--- 类和对象(下)
【C++ 初阶路】--- 类和对象(下)
14 1
|
2月前
|
存储 编译器 C语言
【C++初阶路】--- 类和对象(中)
【C++初阶路】--- 类和对象(中)
20 1
|
1月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
2月前
|
存储 编译器 C语言
【C++ 初阶路】--- 类与对象(上)
【C++ 初阶路】--- 类与对象(上)
18 0
|
6天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
13 0