C++奇迹之旅(三):缺省参数与函数重载

请添加图片描述

文章目录

  • 📝缺省参数分类
  • 🌠 缺省参数概念
    • 🌉缺省参数分类
  • 🌠全缺省参数
    • 🌉半缺省参数
  • 🌠 函数重载
    • 🌉 函数重载概念
      • 🌠参数类型不同
      • 🌠参数个数不同
      • 🌠参数类型顺序不同
  • 🚩总结


📝缺省参数分类

🌠 缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。

#include <iostream>
using namespace std;void Func(int a = 0)
{cout << a << endl;
}
int main()
{Func();     // 没有传参时,使用参数的默认值Func(10);   // 传参时,使用指定的实参return 0;
}

在这里插入图片描述

🌉缺省参数分类

C++中的缺省参数可以细分为全缺省参数和半缺省参数两类:

🌠全缺省参数

C++中的缺省参数可以细分为全缺省参数和半缺省参数两类:

全缺省参数(Default arguments):

  • 函数定义时所有参数都给定了默认值。
  • 调用时可以不传任何参数,全部使用默认值。

例如:

// 全缺省
void F2(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{F2(1, 2, 3);F2(1, 2);F2(1);F2();return 0;
}

在这里插入图片描述

🌉半缺省参数

半缺省参数(Partial default arguments):

  • 函数定义时只给部分参数设置了默认值。
  • 调用时可以选择传递带默认值的参数或不传使用默认值。

例如:

// 半缺省,从右往左缺省
void F3(int a, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{// 必须顺序传,不能跳跃着传// F2(1, ,2);F3(1);F3(1, 2);F3(1, 2, 3);return 0;
}

在这里插入图片描述

注意: == 1. 半缺省参数必须从右往左依次来给出,不能间隔着给==
在这里插入图片描述

  1. 缺省参数不能在函数声明和定义中同时出现
    如:
 //a.hvoid Func(int a = 10);// a.cppvoid Func(int a = 20){}
注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该
用那个缺省值。

这是因为:

  • 函数声明主要用于告诉编译器函数接口,此时不需要知道默认值。
  • 默认值属于函数实现细节,应该只在定义中给出。
  • 如果声明和定义都给出默认值,将导致默认值定义不一致从而产生错误。

所以,正确做法是:

  • 函数声明只声明参数,不给默认值。
  • 函数定义中给需要的参数设置默认值。
// 函数声明,只声明参数不设定默认值
void func(int x, int y); // 函数定义,给y参数设置默认值
void func(int x, int y = 0) {// 函数体std::cout << x << " " << y << std::endl;
}int main() {func(1); // 调用1,y使用默认值0  func(2, 3); // 调用2,传递y实际值3return 0;
}
  1. 缺省参数的值必须是常量或者全局变量。
  • 这是因为函数调用时,缺省参数需要直接用其值替换,所以值必须在编译期间就能确定。
  • 如果用非常量表达式,编译器无法确定默认值,从而无法完成调用参数替换。
  1. 原生C语言本身不支持缺省参数(编译器不支持)。
  • C++是在C语言基础上增加了许多新特性,缺省参数就是其中一个新增特性。
  • 所以纯C语言编译器通常不支持缺省参数这个语法,需要依靠C++编译器支持。
#include <stdio.h>int global_var = 10; int func(int x, int y) 
{return x + y;
}int main() 
{int a = 5;// 错误,C语言不支持这个语法func(1);  // 正确,使用全局变量作为缺省值func(2, global_var);// 错误,使用非常量表达式作为缺省值func(3, a);  return 0;
}

🌠 函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重
载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

🌉 函数重载概念

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

🌠参数类型不同

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;
}

在这里插入图片描述

🌠参数个数不同

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;
}

在这里插入图片描述


🚩总结

感谢你的收看,如果文章有错误,可以指出,我不胜感激,让我们一起学习交流,如果文章可以给你一个小小帮助,感谢💓 💗 💕 💞,喜欢的话可以点个关注,也可以给博主点一个小小的赞😘呀
请添加图片描述

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

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

相关文章

SpringWebFlux初步认识

反应式编程的认识 基础认识 命令式编程&#xff1a;后一行代码需要等待前一行代码执行完毕&#xff0c;也就是后面的执行任务步骤依赖于前面的执行任务。 反应式编程&#xff1a; 定义了一组如何处理数据的任务&#xff0c;这些任务是可以并行进行的&#xff0c;可以在处理数…

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程&#xff0c;由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性&#xff0c;长期以来一直视为汽车零部件制造业的薄弱环节&#xff0c;并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

C++蓝桥考级一级到十八级的考点内容整理

以下是C蓝桥考级一级到十八级的考点内容整理&#xff1a; C一级考点内容 C程序基本结构 初步了解C编程了解C程序基本结构&#xff1a;头文件、命名空间、主函数、基本输入输出 cin、cout C二级考点内容 数据类型与变量 掌握编程中数学表达式的计算方式基础数据类型、变量的…

2024年2月游戏手柄线上电商(京东天猫淘宝)综合热销排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;游戏手柄品牌销售数据已出炉&#xff01;2月游戏手柄销售数据呈现出强劲的增长势头。 根据鲸参谋数据显示&#xff0c;今年2月游戏手柄月销售量累计约43万件&#xff0c;同比去年上涨了78%&#xff1b;销售额累计达1…

武汉星起航:跨境电商获各大企业鼎力支持,共筑繁荣生态

随着全球化和数字化的深入发展&#xff0c;跨境电商行业逐渐成为连接国内外市场的重要桥梁。在这一进程中&#xff0c;各大企业纷纷加大对跨境电商行业的支持力度&#xff0c;通过投资、合作与创新&#xff0c;共同推动行业的繁荣与发展。武汉星起航将探讨各大企业对跨境电商行…

Linux安装python3

Linux安装python3 本文章中使用的安装包等相关文件&#xff1a; 链接: https://pan.baidu.com/s/1C4PTB6IqXtHM6XSOEMkefg 提取码: wyeq 1.编译环境安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc mak…

Linux 基于chrony进行时钟同步方案验证

Linux 基于chrony进行时钟同步方案验证 1. 背景介绍2. 验证过程2.1 追踪配置2.2 追平记录2.2 追平时间换算 3. 疑问和思考3.1 如何统计追踪1s需要花费多长时间&#xff1f; 4. 参考文档 chrony是一个Linux系统中用于时钟同步的工具。它使用NTP&#xff08;网络时间协议&#xf…

在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)

问题场景 目前我的环境变量都存储在 /etc/profile 文件中&#xff0c;当我通过远程 SSH 执行一些命令时&#xff0c;提示命令找不到&#xff0c;如下所示&#xff1a; 问题出现原因 这里找到了一张出自尚硅谷的图片&#xff0c;很好的解释了该问题&#xff1a; 这是由于 Linu…

【BlossomRPC】一个完整的含源码和文档的RPC项目

文章目录 手把手教你写一个RPC协议如何自定义一个RPC协议&#xff1f;编解码器的实现服务暴露与发现服务端与客户端服务解析注解的实现服务端与客户端请求Handler接入注册中心 RPC项目源码 配置中心项目源码 ⭐网关项目源码⭐ 手把手教你写一个RPC协议 如何自定义一个RPC协议…

Java解决数位递增的数

Java解决数位递增的数 01 题目 一个正整数如果任何一个数位不大于右边相邻的数位&#xff0c;则称为 个数位递增的数。 例如 1135 是一个数位递增的数&#xff0c;而 1024 不是一个数位递增的数。 给定正整数n&#xff0c;请问在整数 1 至 n 中有多少个数位递增的数? 输入描…

Java数据结构-链表OJ题

目录 1. 移除链表元素2. 反转链表3. 返回中间结点4. 返回倒数第k个结点5. 合并两个有序链表6. 分割链表7. 回文链表8. 找相交链表的公共结点9. 判断链表是否有环10. 返回链表环的入口 老铁们好&#xff0c;学习完链表这个数据结构之后&#xff0c;怎么能少了OJ题呢&#xff1f;…

HTLM 之 vscode 插件推荐

文章目录 vscode 插件live Serverprettiersetting 保存这个文档的更改Material Theme / Material Theme icon vscode 插件 live Server prettier setting 搜索 format default 保存这个文档的更改 cmds // mac ctrls // win Material Theme / Material Theme icon 来更换…

Mysql中的那些锁

表锁和行锁 表锁&#xff1a;一锁锁整张表&#xff0c;mysql中锁定颗粒度最大的一种&#xff0c;针对非索引字段加的锁。MyISAM和InnoDb都支持。 行锁&#xff1a;一锁只锁整行&#xff0c;锁定颗粒度最小&#xff0c;针对索引字段加的锁。MyISAM不支持&#xff0c;InnoDb支持…

【No.21】蓝桥杯组合数学|数位排序|加法计数原理|乘法计数原理|排列数|组合数|抽屉原理|小蓝吃糖果|二项式定理|杨辉三角|归并排序(C++)

组合数学 数位排序 【问题描述】 小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。 例如,2022 排在 409 前面, 因为 2022 的数位之和是 6,小于 409 的数位 之和 13。…

数据结构:Trie(前缀树/字典树)

文章目录 一、介绍Trie1.1、Trie的结点结构1.2、Trie的整体结构 二、Trie的操作2.1、Trie插入操作2.2、Trie查找操作2.3、Trie前缀匹配操作2.4、Trie删除操作 三、实战3.1、实现Trie&#xff08;前缀树&#xff09; 一、介绍Trie Trie 又称字典树、前缀树和单词查找树&#xff…

C++11 shared_from_this学习

最近学习网络变成发现一些C源码库中封装对象时会公有继承enable_shared_from_this&#xff1b; 用一个案例进行说明&#xff0c;案例代码如下&#xff1a; #include <iostream> #include <memory> #include <stdio.h>using namespace std;class C : public…

RPC(Remote Procedure Call)远程过程调用

定义 RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;它允许程序在不同的计算机之间进行通信和交互&#xff0c;就像本地调用一样。 为什么需要 RPC&#xff1f; 回到 RPC 的概念&#xff0c;RPC 允许一个程序…

快速上手Spring Cloud 十七:深入浅出的学习之旅

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

2000-2021年各省人口密度数据(原始数据+结果)

2000-2021年各省人口密度数据&#xff08;原始数据结果&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;年末常住人口、行政区划面积、人口密度 3、来源&#xff1a;国家统计局、统计年鉴 4、范围&#xff1a;31省 5、计算说明&#xff1a;人口密度年末常…

Python数据分析四

一、Python的字符串下表取值 在Python中&#xff0c;可以通过索引&#xff08;indexing&#xff09;来获取字符串中特定位置的字符。字符串的索引从0开始&#xff0c;即第一个字符的索引为0&#xff0c;第二个字符的索引为1&#xff0c;以此类推。 下面是一个示例代码&#x…