【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

news2024/12/26 0:02:55

  🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:http://t.csdnimg.cn/eCa5z

9efbcbc3d25747719da38c01b3fa9b4f.gif

 

目录

命名空间

命名空间的定义 

命名空间的使用

命名空间的嵌套使用

 C++输入&输出

 std命名空间的使用惯例:

 缺省参数

概念

 缺省参数分类

全缺省参数

半缺省参数

        ​编辑 

函数重载


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了命名空间、缺省参数、重载的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

命名空间

如上图,当我们没包stdlib.h的头文件时,可以正常打印。但如果包了该头文件,就会发生错误。

 上面的错误称为命名冲突

命名空间的定义 

 当有两个同名变量时,会优先在找局部的,如果找不到,再找全局的。如果我们想打印1,就可以加上 ‘::’ 前面不加域的情况下,默认是空,也就是全局域,该符号叫域作用限定符。 

当我们需要定义两个全局变量时,我们可以使用namespace关键字。这样两个同名变量x就在各自的命名空间域中。

编译器的搜索原则:

  1. 当前局部域
  2. 全局域
  3. 如果指定了,直接去指定域搜索

命名空间中,还可以定义函数,结构等。使用结构时,注意命名空间名称和作用限定符加在struct后面。注意:同一工程中允许存在多个相同名称命名空间,编译器最后会合成同一个命名空间中。

命名空间的使用

当我们想打印时,如果没有打开std这个空间域,我们就无法用C++方式打印。std是所有C++的库命名空间。如果此时想打印,就必须按下图方式:

第一种:加命名空间名称及域作用限定符

 但是要一直加上命名空间名称和域作用符很麻烦,这时我们可以打开权限,使用using         namespace 命名空间名称,这样就有两种方式打印了:

第二种:使用using namespace 命名空间名称 

上面这种方式不推荐,他只是追求方便,尽量不要打开权限。 

 第三种:使用using将命名空间中某个成员引入

命名空间的嵌套使用

 当定义两个同名函数且在同一个命名空间时,可以在里面继续嵌套命名空间,这样就能区分开了。使用时记得有多层解开。

 C++输入&输出

说明:

  1.  使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  3. .<<是流插入运算符,>>是流提取运算符。 
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。

 std命名空间的使用惯例:

std是C++标准库的命名空间,如何展开std使用更合理呢?

  1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对 象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

 缺省参数

概念

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

 缺省参数分类

  • 全缺省参数

分析:全缺省参数就是参数都给了缺省值。没有传参时,使用参数的默认值。传参时,使用指定的实参。注意:传参时,必须从左往右传参,不能间隔传参。 

  • 半缺省参数

         

分析: 半缺省参数必须从右往左依次来给出,不能间隔着给,因为实参是从左往右匹配的。

 

上图是错误的例子。

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(缺省参数在函数声明给即可)
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持(编译器不支持)

函数重载

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

C语言不允许同名函数

CPP语言允许同名函数,要求:函数名相同,参数不同(例如:类型、顺序、个数不同),构成函数重载。

下面举例类型不同:


C语言不支持重载。因为链接时,直接用函数名去找地址,如果有同名函数,区分不开。

CPP支持。因为有函数名修饰规则,名字中引入参数类型,各个编译器自己实现一套。

举例:【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标 文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。链接器看到a.o调用Add,但是没有Add的地址,就 会到b.o的符号表中找Add的地址,然后链接到一起。链接时,就通过函数名修饰规则找到对应函数。

注意:如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办 法区分。 

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

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

相关文章

穿越周期,海信稳居全球第二的底气和底盘

【潮汐商业评论/原创】 颠覆创新&#xff0c;凡墙皆是门&#xff0c;而因循守旧&#xff0c;凡门皆是墙。 面对充满不确定性的时代&#xff0c;用什么驱散迷雾走向增长&#xff1f;这是当下中国大部分企业所面临的困惑。 选择用什么答案来应对这个问题&#xff0c;也决定了企…

stable-diffusion | v1-5-pruned.ckpt和v1-5-pruned-emaonly.ckpt的区别

https://github.com/runwayml/stable-diffusion?tabreadme-ov-file#reference-sampling-script 对于 1.5 模型&#xff0c;其中可能包括四部分&#xff1a;标准模型、文本编码器、VAE模型、EMA模型。 标准模型&#xff1a;生成图片的核心模块&#xff0c;潜空间中的前向扩散和…

【Django】Django中的缓存

缓存 1 缓存的定义 定义&#xff1a;缓存是一类可以更快的读取数据的介质统称&#xff0c;也指其他可以加快数据读取的存储方式&#xff0c;一般用来存储临时数据&#xff0c;常用介质的是读取速度很快的内存。 意义&#xff1a;视图渲染有一定成本&#xff0c;数据库的频繁查…

电力负荷预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型(结合时间序列)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型(结合时间序列) 所谓预测,就是指通过对事物进行分析及研究,并运用合理的方法探索事物的发展变化规律,对其未来发展做出预先估计和判断…

UE4 C++创建摄像机摇臂和相机并且设置Transform

新建MyPawn C类 .h #include "GameFramework/SpringArmComponent.h" //SpringArm组件 #include "Camera/CameraComponent.h" //Camera组件class 工程名称_API AMyPawn : public APawn { //定义组件变量 public:UPROPERTY(VisibleAnywhere, BlueprintRead…

【数据库原理及应用】简答题归纳总结

第一章 数据库概论 1.人工管理阶段数据管理的特点&#xff1a; &#xff08;1&#xff09;数据不保存在机器中 &#xff08;2&#xff09;无专用的软件对数据进行管理 &#xff08;3&#xff09;只有程序的概念&#xff0c;没有文件的概念 &#xff08;4&#xff09;数据面向程…

2024-02-06 TCP/UDP work

1. 画出TCP三次握手和四次挥手的示意图&#xff0c;并且总结TCP和UDP的区别 三次握手&#xff1a; 4次挥手&#xff1a; tcp/udp区别 TCP 1. 稳定&#xff0c;提供面向连接的&#xff0c;可靠的数据传输服务 2. 传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、…

在 Docker 中启动 ROS2 里的 rivz2 和 rqt 出现错误的解决方法

1. 出现错误&#xff1a; 运行 ros2 run rivz2 rivz2 &#xff0c;报错如下 &#xff1a; No protocol specified qt.qpa.xcb: could not connect to display :1 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was f…

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)。 自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,涉及了处理和理解人类语言的技术…

2024年R2移动式压力容器充装证模拟考试题库及R2移动式压力容器充装理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年R2移动式压力容器充装证模拟考试题库及R2移动式压力容器充装理论考试试题是由安全生产模拟考试一点通提供&#xff0c;R2移动式压力容器充装证模拟考试题库是根据R2移动式压力容器充装最新版教材&#xff0c;R2…

centos 7.6 安装cas 对接ldap 单点登录实战

centos 7.6 安装cas 对ldap 单点登录实战 1、安装前准备工作1.1、centos 7.6 安装JDK 1.81.2、centos 7 安装tomcat 9.0.841.3、windows10 安装JDK 1.81.4、windows10 安装打包工具 maven 3.9.6 2、下载cas 5.3 并打包成war包3、部署cas到tomcat4、cas对接ldap 1、安装前准备工…

百度拟将量子实验室捐赠予北京量子院 /一汽解放与华为合作,预计2025年底量产自动驾驶产品 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 百度捐赠量子实验室推进量子计算研究&#xff0c;助力人工智能发展 一汽解放…

qt学习:mplayer播放器(视频)+arm如何播放视频实战+c启动播放器

目录 作用 linux下载 arm下载 使用方法 键盘 命令 命令词有很多&#xff0c;举例几个 在arm上qt实战 配置ui界面 添加头文件&#xff0c;成员&#xff0c;函数 添加视频按钮点击事件 列表选项双击事件 播放按钮点击事件 暂停继续按钮点击事件 停止按钮点击事件 …

远程主机可能不符合glibc和libstdc++ VS Code服务器的先决条件

报错信息 VSCode无法连接远程服务器&#xff0c;终端一直提醒&#xff1a; [22:46:01.906] > Waiting for server log... [22:46:01.936] > Waiting for server log... [22:46:01.951] > [22:46:01.967] > Waiting for server log... [22:46:01.982] > [22:…

我在项目中使用Redis的几个场景

目录 缓存 会话存储 分布式锁 消息队列 位统计 计数器 排行榜 缓存 缓存的目的是为了提高系统响应速度、减少数据库等资源的压力&#xff0c;redis作为键值对形式的内存数 据库&#xff0c;可以提供非常快速的读取速度&#xff0c;使得它成为存储热点数据或频繁访问数…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

Linux------命令行参数

目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al &#xff0c;可以查看当前文件夹下所有文件的信息&#xff0c;还有其他的如rm&#xff0c;touch等指令&#xff0c;都可以帮我们完成相应的操作。 其实运行这些…

c#cad 创建-直线(五)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是用于在AutoCAD中创建一条直线。首先获取当前活动文档和数据库的引用&#xff0c;然后创建一个编辑器对象用于提示用户输入。接下来&#xff0c;在一个事务中获取模型空间的块表记录&#xff0c;并定义直线的长度…

Python模拟点赞助手

背景 之前公司一直会安排各种学习任务&#xff0c;视频章节很多的视频&#xff0c;有些是技术的有些是政策相关的&#xff0c;如果没有按时完成学习任务会被通报。但是&#xff0c;这些学习内容不一定有帮助&#xff0c;所以大家就养成了刷课的习惯&#xff0c;也就是点开视频…

网络协议与攻击模拟_15FTP协议

了解FTP协议 在Windows操作系统上使用serv-U软件搭建FTP服务 分析FTP流量 一、FTP协议 1、FTP概念 FTP&#xff08;文件传输协议&#xff09;由两部分组成&#xff1a;客户端/服务端&#xff08;C/S架构&#xff09; 应用场景&#xff1a;企业内部存放公司文件、开发网站时利…