初识C++ (二)

news2024/12/23 10:32:01

初识C++ 二

  • 上节课输入输出问题的一些补充
  • 一. 缺省参数
    • 1.1 半缺省参数
    • 1.2 全缺省参数
  • 二. 函数重载
    • 2.1 重载是什么意思?
    • 2.2 如何区分重载函数
      • 参数类型不同
      • 参数个数不同
      • 参数顺序不同
      • 附加题1
      • 附加题2
    • 2.3 c++支持函数重载的原理
      • 预处理
      • 编译
      • 汇编
      • 连接
  • 总结

在这里插入图片描述
要以一种很认真的态度去生活

上节课输入输出问题的一些补充

其实printf和cout之间并没有明显的优劣之分
大家根据自己的需要 根据使用的方便程度自行选择就好

一. 缺省参数

我们这里先来看百度上的定义

所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。

什么意思捏 好像还是有点不理解 那么我们来上代码

我们写出下面这段代码

void func(int a = 10)
{
	cout << "a:  " << a << endl;
}

我们再main函数里面运行一下试试看

我们可以发现 咦 好像不使用参数也可以运行!

在这里插入图片描述
接下来我们试试看使用参数会有什么效果

在这里插入图片描述

接下来看看其他值怎么样

20也是可以的

在这里插入图片描述
那么这里我们就可以发现一个规律了

当我们在调用函数的时候不指定值的时候它就会使用我们函数定义时的默认值

当我们在调用函数的时候指定值的时候使用的参数就是指定值

1.1 半缺省参数

半缺省参数即使缺省一部分的参数(注意这里并不是一半

注意点!!!

我们这里必须要从右往前缺省参数 以下格式是绝对不可以的

在这里插入图片描述
我们有代码如下

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

调用格式如下

func2(10);

打印结果如下

在这里插入图片描述

1.2 全缺省参数

比如说这样子的代码

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

我们可以有以下调用方式

int main()
{
	func3();
	func3(1);
	func3(1,2);
	func3(1,2,3);

	return 0;
}

但是我们这里要注意的是

像是这样子的调用是绝对不被允许的

//func(, ,3)

因为我们的函数传参是严格按照从左到右的顺序
在这里插入图片描述

二. 函数重载

2.1 重载是什么意思?

从简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形

也就是说 一个函数名可以对应多个函数

那么我们要怎么区分这几个函数呢?

2.2 如何区分重载函数

参数类型不同

例如下面两个函数

void test1(int a)
{
	;
}

void test1(double a)
{
	;
}

它们就是两个同名的重载函数

参数个数不同

例如下面这两个函数

void test1(int a)
{
	;
}

void test1(int a , char b)
{
	;
}

参数顺序不同

例如下面这两个函数

void test1(int a , char b)
{
	;
}

void test1(char a, int b)
{
	;
}

附加题1

我们来思考下这两个函数

它们是否是重载函数呢

void test1()
{
	;
}

void test1(int a = 10)
{
	;
}

我们这里传参的时候是不会报错的

但是如果说不传参的话就会存在歧义

对吧 两个都可以不传参调用 你要返回哪个呢?

附加题2

返回值不同 这里构成重载嘛?

这个问题是不是和上面的一样啊

我们怎么区分要调用哪个函数呢?

2.3 c++支持函数重载的原理

我们都知道 函数处理需要进行四个阶段

预处理

它的作用有四个

头文件展开
宏定义的替换
条件编译
去掉注释

编译

检查语法

所以说我们的语法错误报错是在编译阶段报错的

汇编

转换成二进制指令

连接

合并段表
符号表的合并和重定位

这里主要问题出现在连接阶段

为什么呢?

这里简单的提一嘴

在第三步汇编语言变成了二进制语言

在c语言中

是函数调用call函数 再调用jump函数 再找到函数

是这样子的 f(?)

再c++中

也是一个这样子的过程

但是会对函数名字(由于参数不同)进行一个加工所以说c++会支持重载函数

在这里插入图片描述

总结

本节课学习了缺省参数(包括半缺省和全却省)
学习了重载函数(如何区分)
简短的介绍了c++的函数重载原理

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

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

相关文章

深度优先搜索(dfs)和广度优先搜索(bfs)

目录 一、前言 二、关于dfs和bfs有意思的小故事 三、深搜题例 1、小猫爬山链接 2、基本思路 3、代码 &#xff08;1&#xff09;python代码 四、广搜题例 1、武士风度的牛链接 2、基本思路 3、代码 &#xff08;1&#xff09;C代码 &#xff08;3&#xff09;pyth…

现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?

C/C会不会被时代淘汰&#xff1f;这个问题跳过了一步&#xff0c;关键是这个问题&#xff1a; C/C有哪些其它语言难以代替的特殊之处&#xff1f; 1、对实现细节的控制粒度 一般我们常说&#xff1a;C/C具有较高的执行效率。其实这句话不是特别准确&#xff0c;有时候它们并…

npm报错整理

npm报错整理一、代理1. 因为使用公司的镜像源导致的403 forbidden总结一、代理 1. 因为使用公司的镜像源导致的403 forbidden 在更新脚手架的时候&#xff0c;遇到了403的报错&#xff1a; 遇到问题不要怕&#xff0c;我们根据错误去解决就好。 &#xff08;1&#xff09;首…

【黄啊码】MySQL入门—13、悲观锁、乐观锁怎么用?什么是行锁、页锁和表锁?死锁了咋办?

大家好&#xff01;我是黄啊码&#xff0c;MySQL的入门篇已经讲到第12个课程了&#xff0c;今天我们继续讲讲大白篇系列——数据库锁 目录 从数据库管理的角度对锁进行划分 共享锁也叫读锁或 S 锁 排它锁也叫独占锁、写锁或 X 锁。 意向锁&#xff08;Intent Lock&#xf…

C++库——windows下使用Qt5.15.2+mingw64+msys2编译c++数学库GSL

文章目录准备配置msys2编译GSL准备 下载gsl库的源代码。大家可以到GSL的官网下载gsl的源代码。目前版本为2.7&#xff0c;下载完成后解压缩。 下载msys2。msys2是一套在windows上运行的用于构建库和程序的工具库&#xff0c;下载地址可以使用清华源的下载地址。下载完成后&…

【论文解读】伪装物体检测 Camouflaged Object Detection

文章目录伪装物体检测 Camouflaged Object DetectionSINet v1RF模块&#xff1a;PDC模块&#xff1a;SINet v2特征提取Texture Enhanced Module 纹理增强模块Neighbor Connection Decoder 邻居连接解码器Group-Reversal Attention 组反转注意力总结伪装物体检测 Camouflaged Ob…

计算机毕业设计之java+javaweb的烯烃厂压力管道管理平台

项目介绍 系统权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;主页、个人中心、通知公告管理、用户管理、管道信息管理、单位信息管理、管道统计信息管理等功能。 (b) 用户登录进入系统可以对主页、个人中心、通…

2022高频经典前端面试题(html+css+js上篇,含答案)

博主经历过多轮面试&#xff0c;因此想将自己的面试经验以及答题技巧&#xff0c;分享给即将面试找前端工作的同学。 2022高频经典前端面试题分为上中下三篇&#xff0c;分别会有html,css,js,es6,vue,ts,nodejs,以及hr面和反问面试官几个维度去进行&#xff0c;完整的还原面试场…

在 Linux 中使用 tcp 转储命令来分析网络

前言 Tcpdump是用于分析网络和查找相关网络问题的出色工具。它会在数据包经过时捕获数据包&#xff0c;并向您显示网络上正在发生的事情和传入情况。该命令的输出显示在 STDOUT 上&#xff0c;也可以存储在文件中。 感谢开发人员&#xff0c;他们将Tcpdump保留为开源项目。它…

LinkedIn最好工具-领英精灵有哪些批量加好友方法?

领英工具-领英精灵有哪些批量加好友方法 使用领英的人都会使用领英精灵&#xff0c;因为领英精灵是目前本土做得最好的领英工具&#xff0c;具有很多强大的功能。特别是拓展人脉方面&#xff0c;提供了很多批量加好友的方法。刚使用的新手可能不知道如何操作&#xff0c;下面就…

施耐德电气“创新开放日”走进中国软件研发中心 以软件与创新驱动产业“双转型”

来源 | 施耐德电气 2022年10月27日&#xff0c;施耐德电气在位于北京亦庄的中国软件研发中心举办“创新开放日”&#xff0c;充分展示其在中国深化研发的战略布局。当天&#xff0c;施耐德电气展示了该中心成立一周年以来的创新研发成果&#xff0c;并与合作伙伴共话软件发展趋…

【jsdoc-to-markdown】一步步实现js文件的文档生成

文章目录导读开发环境安装Vs code插件&#xff1a;Doxygen Documentation Generator效果优势jsdoc-to-markdown的使用了解 jsdocjsdoc-to-markdown安装创建测试文件example.jsjsdoc-to-markdown使用jsdoc-to-markdown踩坑&#xff01;&#xff01;&#xff01;参考资料导读 这个…

【C++】一文带你吃透string的模拟实现 (万字详解)

&#x1f308;欢迎来到C专栏~~ 模拟实现string (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort&#x1f393;&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x1f914;&#…

生态流量智能终端机 水电站生态流量多媒体智能终端-视频叠加、数据采集、远程传输

平升电子生态流量智能终端机 水电站生态流量多媒体智能终端是一款集人机交互、视频叠加、4G路由、数据采集、逻辑运算与远程传输功能于一体的多媒体智能终端设备。 此款产品为水电站生态流量监测项目的专用产品&#xff0c;便于监管单位及时掌握水电站的流量下泄情况&#xff…

【Django框架】——19 Django视图 01 路由配置

文章目录一、视图介绍二、路由配置1. 配置URLconf2.编辑项目中urls.py&#xff08;根路由&#xff09;3.创建应用中 urls.py (子路路由)4.路由文件urls.py5.API讲解一、视图介绍 视图就是应⽤用中views.py⽂文件中的函数 视图的第⼀个参数必须为HttpRequest对象&#xff0c;还…

计算多张图片的移位距离

( A, B )---25*30*2---( 1, 0 )( 0, 1 ) 做一个二分类的网络分类A和B&#xff0c;让A和B的训练集中都有多张图片&#xff0c;用一种平均值的办法把多张图片等效成两张图片&#xff0c;统计两张图片的移位距离&#xff0c;并比较移位距离和迭代次数的关系。 设AB训练集都只有两…

Python编程 赋值,逻辑,位运算符

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.赋值运算符 1.基本赋值运算符 2.注意 二.逻辑运算符 1.逻辑运算符使…

【LeetCode】No.70. Climbing Stairs -- Java Version

题目链接&#xff1a;https://leetcode.com/problems/climbing-stairs/ 1. 题目介绍&#xff08;Climbing Stairs&#xff09; You are climbing a staircase. It takes n steps to reach the top. 【Translate】&#xff1a; 你正在爬楼梯&#xff0c;爬到山顶要走n步。 Each…

最受欢迎的职业榜单!医生还是程序员?

最受欢迎的男友职业排行榜终于更新了&#xff0c;医生荣归榜首成为了第一名。 出人意外的是&#xff0c;公务员竟然只排名第六。 榜单上可以看出程序员也霸榜&#xff0c;占据了排行前三的位置。 程序员相对于医生有什么样的优势呢&#xff1f; 首先是逻辑分析能力。 虽然医生…

CMSC5707-高级人工智能之自编码器Auto-encoders

这章讲述模型框架和概念的时间较多&#xff0c;好像并没有涉及过多的运算&#xff0c;重在一些概念的理解。 Traditional Autoencoder 传统的自编码器常用来进行图像去噪的任务&#xff0c;需要了解其模型架构和流程。 自编码器由两部分组成&#xff1a;从Noisy Input到Z称为…