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

  🌈个人主页:秦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.hqwc.cn/news/458165.html

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

相关文章

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数&#xff0c;一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数&#xff0c;一个数据库能够支撑最大的连接数是多少呢&#xff1f; …

互联网医院|互联网医院系统创新诊疗模式

互联网医院&#xff0c;看似简单却隐藏着复杂的操作。想要在线上开展合法合规的诊疗业务&#xff0c;并非易事。有三个关键要素不可少&#xff1a;一是符合当地政策要求的线下实体医疗机构&#xff1b;二是合法合规的互联网医院系统&#xff1b;三是通过申办获得的互联网医院牌…

Java面向对象 构造器的重载

目录 创建类测试构造器的重载分析 创建类 public class Person02 {//属性&#xff1a;String name;int age;double height;//空构造器public Person02(){}public Person02(String name,int age,double height){//当形参名字和属性名字重名的时候&#xff0c;会出现就近原则&am…

外汇天眼:Vistova──假投顾带单获利400%,黑平台一再拖延不出金

在这个物价高涨的时代&#xff0c;愈来愈人意识到投资抗通胀的重要性&#xff0c;但因缺乏相关的专业知识而感到迷茫&#xff0c;甚至因此误信诈骗集团保证获利、稳赚不赔的话术&#xff0c;蒙受极大的金钱损失。 不久前&#xff0c;一位投资人向外汇天眼爆料Vistova这平台&…

入侵报警系统行业研究:智能化潮流助力市场维持正增长

侵报警系统intruder alarm system(IAS)利用传感器技术和电子信息技术探测并指示非法进入或试图非法进入设防区域(包括主观判断面临被劫持或遭抢劫或其他危急情况时&#xff0c;故意触发紧急报警装置)的行为&#xff0c;处理报警信息、发出报警信息的电子系统或网络。 当入侵行为…

pycharm 配置 conda 新环境

1. conda 创建新环境 本章利用pycharm将conda新建的环境载入进去 关于conda的下载参考上一章博文&#xff1a;深度学习环境配置&#xff1a;Anaconda 安装和 pip 源 首先利用conda 新建虚拟环境 这里按 y 确定 安装好如下&#xff1a;这里两行命令代表怎么激活和关闭新建的虚…

【Linux Day15 TCP网络通讯】

TCP网络通讯 TCP编程流程 接口介绍 socket()方法是用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。创建套接字时要指定使用的服务类型&#xff0c;使用 TCP 协议选择流式服务&#xff08;SOCK_STREAM&#xff09;。 **bind()方法是用来指定套接字使…

[C/C++] -- JSON for Modern C++

JSON for Modern C&#xff08;nlohmann/json&#xff09;是一个流行的 C JSON 库&#xff0c;由德国开发者nlohmann编写。这个库提供了简洁而灵活的 API&#xff0c;使得在C中解析和生成JSON数据变得非常方便。 1.JSON简介 JSON&#xff08;JavaScript Object Notation&…

论文精读--ViT

ViT的提出挑战了CNN在计算机视觉领域的绝对统治地位。ViT不仅在视觉领域开了一个新坑&#xff0c;因为它打破了cv与nlp之间的壁垒&#xff0c;所以还在多模态领域挖了一个大坑 题目是AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE&#xff0c;把…

(2)(2.14) SPL Satellite Telemetry

文章目录 前言 1 本地 Wi-Fi&#xff08;费用&#xff1a;30 美元以上&#xff0c;范围&#xff1a;室内&#xff09; 2 蜂窝电话&#xff08;费用&#xff1a;100 美元以上&#xff0c;范围&#xff1a;蜂窝电话覆盖区域&#xff09; 3 手机卫星&#xff08;费用&#xff…

EDM营销平台哪个好?推荐的邮件营销平台?

EDM邮件营销平台有哪些&#xff1f;外贸EDM邮件营销平台有哪些&#xff1f; EDM营销平台已成为企业推广产品和服务的重要工具。但是&#xff0c;面对市场上众多的EDM营销平台&#xff0c;究竟哪个更好呢&#xff1f;下面&#xff0c;蜂邮EDM将从平台功能、用户体验、数据分析和…

SpringMVC原理(设计原理+启动原理+工作原理)

文章目录 前言正文一、设计原理1.1 servlet生命周期简述1.2 设计原理小结 二、启动原理2.1 AbstractHandlerMethodMapping 初始化 --RequestMapping注解解析2.2 DispatcherServlet 的初始化2.3 DispatcherServlet#initHandlerMappings(...) 初始化示例说明 三、工作原理 前言 …