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

news/2025/3/11 7:02:53/

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

  • 1.缺省参数
    • 1.1全缺省
    • 1.2半缺省
  • 2.什么是函数重载
  • 3.不同类型的函数重载
  • 4.为什么C++支持函数重载而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++是通过这样蕴含信息的名字来寻找函数的,所以能使用函数重载


http://www.ppmy.cn/news/1578279.html

相关文章

RAG助力机器人场景理解与具身操作!EmbodiedRAG:基于动态三维场景图检索的机器人任务规划

作者&#xff1a;Meghan Booker, Grayson Byrd, Bethany Kemp, Aurora Schmidt, Corban Rivera单位&#xff1a;约翰霍普金斯大学论文标题&#xff1a;EmbodiedRAG: Dynamic 3D Scene Graph Retrieval for Efficient and Scalable Robot Task Planning论文链接&#xff1a;http…

NFS,Nginx综合实验

1.实验要求 配置NFS服务器作为 ngxin 服务的存储目录&#xff0c;并在目录中创建 index.html 文件&#xff0c;当访问 http://你的IP 地址时&#xff0c;可以成功显示 index.html 文件的内容。 | 角色 | 软件 | IP | 主机名 | 系统 | | NFS服务器 | nfs-utils | 192.168.72.7…

音频进阶学习十九——逆系统(简单进行回声消除)

文章目录 前言一、可逆系统1.定义2.解卷积3.逆系统恢复原始信号过程4.逆系统与原系统的零极点关系 二、使用逆系统去除回声获取原信号的频谱原系统和逆系统幅频响应和相频响应使用逆系统恢复原始信号整体代码如下 总结 前言 在上一篇音频进阶学习十八——幅频响应相同系统、全…

docker无法pull镜像问题解决for win10

docker无法pull镜像问题解决for win10 问题原因分析解决方法 问题 在win10系统上安装好doker-desktop后ping registry-1.docker.io不同&#xff0c;并且也无法登陆hub.docker.com, 使用docker pull xx也无法正常下载 原因分析 hub.docker.com在2024年5月之后&#xff0c;国内…

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

009---基于Verilog HDL的单比特信号边沿检测

文章目录 摘要一、边沿检测二、时序逻辑实现2.1 rtl2.2 tb 三、组合逻辑实现3.1 rtl3.2 tb 摘要 文章为学习记录。采用时序逻辑和组合逻辑实现边沿检测的核心逻辑。组合逻辑实现的上升沿和下降沿的脉冲比时序逻辑实现的上升沿和下降沿的脉冲提前一拍。 一、边沿检测 边沿检测…

ThreadLocal源码剖析

文章目录 四种引用的概念Entry的类定义弱引用和内存泄漏如果key使用强引用如果key使用弱引用为什么使用弱引用 hash冲突的解决ThreadLocalMap中的set方法演示垃圾回收get触发GCset触发GC ThreadLocal-内存清理探测式清理&#xff08;ExpungeStaleEntry&#xff09;启发式清理&a…

图形编辑器基于Paper.js教程24:图像转gcode的重构,元素翻转,旋转

前段时间在雕刻图片时&#xff0c;旋转图片&#xff0c;翻转图片后&#xff0c;发现生成准确的gcode&#xff0c;虽然尺寸对&#xff0c;但是都是以没有旋转&#xff0c;没有翻转的图片进行生成的。后来思考了一下&#xff0c;发现这真是一个大bug&#xff0c;无论图片如何选择…