【C++入门到精通】C++入门—缺省参数、函数重载

news2024/11/26 16:37:01

目录

前言

一、缺省参数

1.缺省参数的概念

2.缺省参数分类

        ⭕全缺省参数

        ⭕半缺省参数

二、函数重载

1.函数重载的概念

2.函数重载类型

        🔴参数类型不同

        🔴参数个数不同

        🔴参数类型顺序不同

C++支持函数重载的原理--名字修饰(name Mangling)

参数匹配


前言

        前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点,也相信大家都掌握的不错,接下来博主将会带领大家继续学习有关C++的知识点——缺省参数、函数重载。下面话不多说坐稳扶好咱们要开车了。

一、缺省参数

1.缺省参数的概念

        所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。 缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即: 带缺省值的参数必须放在参数表的最后面。

例如:

void Func(int a = 0)
{
    cout<<a<<endl;
}
int main()
{
    Func(); // 没有传参时,使用参数的默认值
    Func(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;
}

        ⭕半缺省参数

        也就是部分缺省的函数,部分有初始化的值,例如:

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

   需要注意的有四点:

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

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

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

🔴C语言不支持(编译器不支持)

//a.h
void Func(int a = 10);

// a.cpp
void Func(int a = 20)
{...}

// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。

二、函数重载

1.函数重载的概念

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

2.函数重载类型

        🔴参数类型不同

#include<iostream>
using namespace std;

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

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

        🔴参数个数不同

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

void f(int a)
{
    cout << "f(int a)" << endl;
}

        🔴参数类型顺序不同

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

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

C++支持函数重载的原理--名字修饰(name Mangling)

        想必你的内心肯定有这样的疑问为什么C++支持函数重载,而C语言不支持函数重载呢?

接下来我们来分析一下,首先在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

 

        通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。

参数匹配

        编译器根据当前范围内的函数声明与函数调用中提供的参数的最佳匹配,来选择要调用的重载函数。 如果找到合适的函数,则调用该函数。 (步骤如下)

🔴找到完全匹配项。

🔴已执行不重要的转换。

🔴已执行整型提升。

🔴已存在到所需自变量类型的标准转换。

🔴已存在到所需参数类型的用户定义转换(转换运算符或构造函数)。

🔴已找到省略号所表示的自变量。

        编译器为每个自变量创建一组候选函数。 候选函数是这样一种函数,其中的实际自变量可以转换为形式自变量的类型。为每个自变量生成一组“最佳匹配函数”,并且所选函数是所有集的交集。 如果交集包含多个函数,则重载是不明确的并会生成错误。 对于至少一个参数而言,最终选择的函数始终比组中的所有其他函数更匹配。 如果没有明显的优胜者,函数调用会生成编译器错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Android Studio编辑器上开发的一款看点新闻App

完整资料进入【数字空间】查看——baidu搜索"writebug" 1 系统需求分析 1.1 引言 1.1.1 开发目的 看点新闻App的开发是为了实时查看最新消息以了解社会动态&#xff0c;增长知识&#xff0c;增广见闻&#xff0c;顺便娱乐一下内心世界来放松自己。 1.1.2 开发背景 …

【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

文章目录 一、分频器二、Verilog实现任意倍分频器2.1、Verilog源码2.2、仿真文件 三、仿真波形图 一、分频器 在FPGA&#xff08;可编程逻辑门阵列&#xff09;中&#xff0c;分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输…

Vivado 差分输出引脚配置

diff_out输出如下所示 在引脚配置时&#xff0c;如下图所示&#xff0c;只能设置一个Pos Diff的引脚&#xff0c;此时设置完Pos Diff的引脚后&#xff0c;Neg Diff默认被绑定在相邻的引脚 我们可以打开上图中Package Pins页面&#xff0c;发现这一对引脚设置完毕

基于Java+Swing+mysql人力资源管理系统_员工信息管理系统

基于JavaSwingmysql人力资源管理系统/员工信息管理系统 一、系统介绍二、效果展示1、登陆2、查看个人信息--员工3、更新个人信息--员工4、管理员主页&#xff08;增删改查&#xff09; 三、其他系统实现四、获取源码 一、系统介绍 系统主要分为两个角色&#xff1a; 员工&…

【LeetCode-中等】剑指 Offer 67. 把字符串转换成整数(详解)

题目 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时&#…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

7月最新大模型排名!3700道保密试题、20个大模型参与评测|SuperCLUE

7月最新大模型排名&#xff01;3700道保密试题、20个大模型参与评测&#xff5c;SuperCLUE CLUE中文语言理解测评基准 中文通用大模型综合性评测基准SuperCLUE 2023年7月榜单 7月25日&#xff0c;SuperCLUE发布大模型7月榜单。 SuperCLUE: A Benchmark for Foundation Mo…

【TypeScript】类型推断与类型别名的使用方式。

什么是类型推断&#xff1f; 在 TypeScript 中&#xff0c; 如果声明变量时&#xff0c;没有明确的指定类型&#xff0c;那么 TypeScript 会依照类型推论&#xff08;Type Inference&#xff09;的规则推断出一个类型。 以下代码虽然没有明确指定类型&#xff0c;但是会在编译的…

web安全漏洞总结

目录 &#xff08;一&#xff09;网络安全常见漏洞 1、sql注入漏洞 漏洞解释与形成原因 漏洞分类&#xff1a; 漏洞存在常见地方&#xff1a; 漏洞利用: 漏洞防御: 攻击流量特征 绕开waf拦截的常用方法 2、文件上传漏洞 漏洞解释与形成原因&#xff1a; 漏洞利用 漏…

20230720在ubuntu22.04系统下载+解密+合并ts切片的步骤

20230720在ubuntu22.04系统下载解密合并ts切片的步骤 2023/7/20 23:06 1、视频源头&#xff0c;打开时效肯定有时间限制的&#xff01; 【并且不同时间打开&#xff0c;下载链接/参数会有区别的&#xff01;以前的链接就会失效/出错了&#xff01;】 https://app1ce7glfm1187.…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统&#xff0c;在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性&#xff0c;可将几乎所有对象存储接入本地作为海量本地磁盘使用&#xff0c;亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

【100天精通python】Day13:面向对象编程_多态和封装,实战模拟电影院的自动售票机选票页面

目录 1 多态&#xff08;Polymorphism&#xff09; 2 封装&#xff08;Encapsulation&#xff09; 3 总结 4 实战&#xff1a;模拟电影院的自动售票机选票页面 在 Python 中&#xff0c;多态和封装是面向对象编程的两个重要概念。 1 多态&#xff08;Polymorphism&#xf…

GoogleLeNet Inception V1

文章目录 Inception V1Inception Modulenative versionInception module with dimensionality reduction1 * 1网络的降维说明 多个Softmax的输出整体结构 GoogleLeNet主要是把深度扩充到了22层&#xff0c;能增加网络深度而不用担心训练精度和梯度消失问题。 总共是提出了4个版…

【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法

文章目录 断码屏驱动补充MX_LCD_Init()驱动初始化失败 断码屏驱动补充 已经有大神写过较详细的教程&#xff1a;https://blog.csdn.net/CSDN_Gao_16/article/details/115463499&#xff0c;但这篇博文仍然比较抽象&#xff0c;我看了好多遍才看明白-_-||&#xff0c;为了节省和…

金融中的数学:贝叶斯公式

1.贝叶斯定理 贝叶斯定理是概率论中的一项重要定理&#xff0c;用于在已知某一事件的条件下&#xff0c;求另一事件发生的概率。它是根据条件概率推导出来的&#xff0c;得名于英国数学家托马斯贝叶斯。 贝叶斯定理可以表示为&#xff1a; 这个式子就是贝叶斯公式&#xff0c…

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目 创建项目时&#xff0c;LabVIEW将显示“创建项目”对话框&#xff0c;以帮助您选择模板或示例项目来作为开发起点。如果要使用您创建的项目作为自定义模板和示例项目&#xff0c;您必须将每个项目的源文件和元数据添加到相应…

算法与数据结构(四)--队列

一.队列的基本概念 队列是另一种特殊的表&#xff0c;这种表只在表首&#xff08;也称为队首&#xff09;进行删除操作&#xff0c;只在表尾进行插入操作。队列的修改是按先进先出的规则进行的&#xff0c;所以队列又称为先进先出表&#xff0c;First In First Out&#xff0c…

高温介电参数测试

高温介电参数测试 在新材料科研领域&#xff0c;高温介电参数的测量是众多高校和研究所经常会面临的问题。精科声学所事业部电子和专业的高温介电系统集成商合作&#xff0c;使用 JKZC-YDZK03A型高温压电阻抗综合分析仪进行配套系统集成&#xff0c;满足客户高温介电测量和曲线…

什么是 web3?

在百度搜索引擎输入 “Web3”、“大厂”。跳出来基本都是这样的标题. 以及如今的互联网行业 “哀鸿遍野”&#xff0c;不仅内卷&#xff0c;还裁员。然后掀起一阵风&#xff0c;猛吹 Web3 的好&#xff0c;数据回归用户……最后再 “威逼利诱” 一下&#xff0c;Web3 就是 20 年…