C++入门篇---(1)命名空间与缺省参数

news2024/12/25 23:56:56

1.前言:

        c++兼容C语言,C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。
        因此你可以理解为c++是在c语言的基础上进行扩展的升级版.

        它补充了C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的.

所以入门篇讲解的就是c++在c基础上优化后的一些地方,对c++的语法进行熟悉.


2关键字

C++总计63个关键字,C语言32个关键字

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

3.命名空间与输入输出

        在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染.

例如:

a06a95f10b64436ebd4a0749f63a12ed.png

        我定义了一个全局变量,对这个变量进行输出,编译器会报错,这是因为名为:rand在头文件中也存在,这就造成了一个问题,命名冲突,但是在未来写项目写代码,命名是必不可少的,因此,c++引入了命名空间,有效的解决这个问题.

3dacfd521ea84cf8a692776fc7cfbd2d.png

        接下来我们对上面这段代码进行解读.

  1. 第一行的头文件是一个io流的头文件,为下面的的cout使用就需要包含这个头文件(c++头文件不包含.h的后缀)
  2. namespace是定义了一个空间,这个空间的里面的命名不会影响其他同名的变量,但是在使用的时候,就需要命名空间名字+::来调用.
  3. 有没有不需要命名空间名字+::来调用呢,可以会觉得这样太麻烦了.答案是有的,在代码的第7行,使用using namespace + 空间名 这个是展开命名空间,直接就可以使用变量名调用,慎用!比较危险,日常谢谢短代码没什么,写项目建议不要展开.
  4. 第10行,cout是流插入,你可以简单理解成C语言中的printf,cout默认把数据插入到终端上,<<你可以简单理解成是一个方向,把箭头这一边的数据,给另一边.这一行的意思就是吧右边的数据给到cout,cout把拿到的数据显示到屏幕上.endl是是一个特殊的输出流操作符,你可以简单理解为'\n'的换行符.

      补充:调用变量名的时候,全局变量找不到的时候,是不会去命名空间里面找的,因此命名空间就像给里面的变量围了一堵墙,空间名+::变量名,好比就是钥匙.

命名空间内部不止可以存放变量,还可以存放类型,函数,甚至可以进行命名空间的嵌套.

200844f98c72468ab38aa1da5398e9aa.png

 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中!

        这里可能还会涉及多个重名的命名空间,c++的处理是这样的:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中.

下面是对上例的补充:

4cb8c3431e1d41169e28835b92565b12.png

 可以单独对某个空间的成员进行展开,更加灵活.

输入输出(上面谈及过一些):

说明:

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
  5. C++的输入输出可以自动识别变量类型。
  6. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
  7. 注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。
std命名空间的使用惯例:
std是C++标准库的命名空间,如何展开std使用更合理呢?
  1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +using std::cout展开常用的库对象/类型等方式

1b8facb8ab5a43bb8b5d840d3a113bd3.png

        如上代码所示,cin是流提取,从键盘上获取的数据,存放到两个变量中,然后再将新的变量值输出.


4.缺省参数

概念:

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

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

分类:

  • 全缺省参数:
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;
}

 注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现

//a.h
void Func(int a = 10);
// a.cpp
void Func(int a = 20)
{}
// 如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该
用那个缺省值。

3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)
 


        以上就是本章的所有的内容啦,又开了个新的篇章,在以后的时间里我也会积极的分享更好的博客给大家,把学习到的内容都写出来,感谢观看!

 

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

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

相关文章

【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

如何优化前端图像和多媒体资源?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【Redis】Set集合相关的命令

目录 命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREMSINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令 SADD 将⼀个或者多个元素添加到set中。注意&#xff0c;重复的元素⽆法添加到set中。 SADD key member [member ...]SMEMBERS 获取⼀个set中的所有元素&#xff0…

【RocketMQ】RocketMQ5.0新特性(一)- Proxy

为了向云原生演进&#xff0c;提高资源利用和弹性能力&#xff0c;RocketMQ在5.0进行了架构的调整与升级&#xff0c;先来看新特性之一&#xff0c;增加了Proxy层。 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构&#xff0c;将计算层与存储层分开。 计算层指的是…

There was an error committing your changes: File could not be edited

使用github完成commit changes时报的一个错误&#xff0c;最终原因是没有填写Extended description

初学vue,想自己找个中长期小型项目练练手,应该做什么?

前言 可以试着做一两个完整的后台管理项目后再去做其他的&#xff0c;下面推荐一些github上的vue后台管理的项目&#xff0c;可以自己选择性的练一下手 Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架&#xff0c;提供了一系列的强大组件和基…

湖州OLED透明拼接屏技术应用引领现代化旅游观光方式

湖州市位于中国浙江省北部&#xff0c;拥有悠久的历史和丰富的文化遗产。湖州市以其美丽的湖泊和秀丽的自然风光而闻名。 作为中国重要的历史文化名城之一&#xff0c;湖州市有着丰富的文化遗产和历史资源&#xff0c;如古城墙、古建筑和古镇等。 这为OLED透明拼接屏技术的应用…

一文讲解图像梯度

简介&#xff1a; ​ 图像梯度计算的是图像变化的幅度。对于图像的边缘部分&#xff0c;其灰度值变化较大&#xff0c;梯度值变化也较大&#xff1b;相反&#xff0c;对于图像中比较平滑的部分&#xff0c;其灰度值变化较小&#xff0c;相应的梯度值变化也较小。一般情…

C++标准模板(STL)- 类型支持 (数值极限,round_style,is_iec559,is_bounded)

数值极限 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits<int>::max() &…

聚观早报 | 首个“5G-A智慧家庭”发布;李鹏称5G-A是5G发展选择

【聚观365】10月12日消息 首个“5G-A智慧家庭”发布 李鹏称5G-A是5G发展的自然选择 新版努比亚Z50S Pro开售 英特尔锐炫A580显卡全球同步上市 vivo X100系列年底登场 首个“5G-A智慧家庭”发布 在全球移动宽带论坛&#xff08;MBBF2023&#xff09;期间&#xff0c;du联合…

中国长序列地表冻融数据集(1978-2015)

简介&#xff1a; 中国长序列地表冻融数据集——双指标算法(1978-2015)采用SMMR&#xff08;1978-1987&#xff09;、SSM/I&#xff08;1987-2009&#xff09;和SSMIS&#xff08;2009-2015&#xff09;逐日亮温数据&#xff0c;由双指标&#xff08;TB,37v&#xff0c;SG&…

【C++进阶之路】C++11(中)

一、可变参数模板 1.基本概念 想要了解C语言的可变参数列表的原理可见&#xff1a;可变参数列表 这个跟C语言的可变参数列表有一定的关系,常用的printf与scanf的参数就包含可变参数列表。 那么可变参数模板是什么呢&#xff1f;举个例子便一目了然。 template<class...Arg…

Qt Quick读取本地文件并显示成表格

&#x1f680;作者&#xff1a;CAccept &#x1f382;专栏&#xff1a;Qt Quick 文章目录 &#x1f34e;C代码部分实现&#x1f680;C类注册到QML中&#x1f382;QML部分实现&#x1f330;小知识点⭐C与QML进行交互⭐将运行路径进行传递保证程序的稳定性⭐QML中定义信号其默认…

【Proteus仿真】【STM32单片机】智能加湿器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、按键、蜂鸣器、DHT11温湿度传感器、水位传感器、PCF8591 ADC、继电器、加湿装置等。 主要功能&#xff1a; 系统运行后&#xff0…

从零开始:深入理解Kubernetes架构及安装过程

K8s环境搭建 文章目录 K8s环境搭建集群类型安装方式环境规划克隆三台虚拟机系统环境配置集群搭建初始化集群&#xff08;仅在master节点&#xff09;配置环境变量&#xff08;仅在master节点&#xff09;工作节点加入集群&#xff08;knode1节点及knode2节点&#xff09;安装ca…

吃鸡高手秘籍大揭秘,享受顶级游戏干货!

大家好&#xff01;作为吃鸡行家&#xff0c;今天我将揭示一些与众不同、足够吸引力的内容&#xff0c;帮助您提高游戏战斗力并分享顶级游戏作战干货。 首先&#xff0c;让我们推荐一些绝地求生作图工具。这些工具可以帮助您在游戏中更好地制作作战图和规划策略&#xff0c;让您…

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 排除路径&#xff0c;增加avatar图片 # security配置 security:# 排除路径excludes:# 静态资源- /*.html…

Python+Tkinter 图形化界面基础篇:集成数据库

PythonTkinter 图形化界面基础篇&#xff1a;集成数据库 引言为什么选择 SQLite 数据库&#xff1f;集成 SQLite 数据库的步骤示例&#xff1a;创建一个任务管理应用程序步骤1&#xff1a;导入必要的模块步骤2&#xff1a;创建主窗口和数据库连接步骤3&#xff1a;创建数据库表…

Spring源码解析—— AOP代理的生成

本文已经收录到大彬精心整理的大厂面试手册&#xff0c;包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等高频面试题&#xff0c;非常实用&#xff0c;有小伙伴靠着这份手册拿…

(1)(1.3) 匿名航空电子设备DroneCAN激光雷达接口

文章目录 前言 1 设置参数 2 参数说明 前言 Avionics Anonymous DroneCAN 激光雷达接口是一个微型接口(Avionics Anonymous DroneCAN LIDAR Interface)&#xff0c;适用于几种常见的激光测距仪(several common laser rangefinders)&#xff0c;可通过 DroneCAN 连接到 Pixha…