【C+ +】第一个C+ + 项目的创建及namespace命名空间解释C++中的输入输出

目录

1.创建第一个c++项目 

1.1项目创建

1.2 .cpp源文件建立 

1.3 第一个c++程序hello world对比c语言hello world 

2.命名空间

2.1 C++关键字

2.2 命名空间---解决c语言中的命名冲突

2.2.1 namespace命名空间用法

 2.2.2 :: 预作用限定符

 2.2.3 命名空间的嵌套

2.2.4  同命名空间的合并

2.2.5 命名空间的使用

2.2.5.1使用using namespace 命名空间名称 引入

2.2.5.2使用using将命名空间中某个成员引入

3.C++的输入&输出

3.1 C++输出使用:cout<<

3.2 c++的输入 

3.3 关于头文件 #include

4.结语 


1.创建第一个c++项目 

1.1项目创建

1.2 .cpp源文件建立 

1.3 第一个c++程序hello world对比c语言hello world 

二者不同的点:

 

头文件不同这个可以理解因为可能包含了我们输出输出函数的不同要包含不同的头文件,突兀的是这一行代码:

using namespace std;

这个是什么含义呢?有什么用是干什么的?这是我们进入c++的第一个问题。c++语言是c语言生长起来的, 兼容百分之九十的c语言,所以我们在c++中仍然可以使用c的代码:

只是一些细节不兼容。c++是面向对象的语言,具有泛型,弥补c语言的不足,那么这个

 using namespace std;

就是为了弥补c语言中一些命名冲突而诞生的我们称为命名空间。接下来我们就详细聊一下这个命名空间。

2.命名空间

2.1 C++关键字

关键字(keyword)属于保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。

namespace就是c++中的一个关键字:作用是解决命名冲突,在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。不过如果命名空间冲突就没有办法了。

下面具体看一下:

2.2 命名空间---解决c语言中的命名冲突

在C语言中我们写下这段代码:

int rand = 10;
int main()
{printf("%d\n", rand);return 0;
}

 运行:

rand是C语言中定义的一个库函数,互相冲突统一叫做命名冲突 C语言没有办法解决这种问题,只能改命名。

 

在我们输出的时候,关于rand这个变量的定义,我们的编译器会先到库函数头文件中寻找,发现是一个库函数,那么后续在遇到这个变量的定义就会报错。如果对于一个变量在库函数中找也没有找到,就会到全局变量中找,再到局部去找,都没有就会报错这个变量没有定义

那么我们的c++为了解决这个命名冲突的问题就使用了namespace这个关键字。

2.2.1 namespace命名空间用法

namespace 命名(可以自己定义,工程项目中一般是项目名)

{

//命名空间中可以是

//变量

//类型

//函数

}
 

 

namespace std//墙把这个rand围起来了,访问的就是全局的外面的,就是//那个rand是函数名字,不能使用%d打印,就报错是一个指针,改成P%
{int rand = 4;
}
namespace myadd
{int Add(int x, int y){printf("%d", x + y);return x + y;}struct Node{struct Node* next;int val;};
}

 

现在我们打印这个rand就没有冲突报错了,但是由于此时我们自己定义的rand在命名空间中,我们编译器会首先到库函数和全局变量中寻找定义,不会访问到命名空间中的定义就不会发生冲突。rand是一个库函数的名字,是一个指针,是函数地址,所以使用%p的形式打印。

 2.2.2 :: 预作用限定符

我们通过预作用限定符号来访问命名空间中的变量和内容,方法如下:

命名空间名::内容

:: 叫做预作用限定符号

 值得注意的是:命名空间中结构体的释放有些不一样:

struct 空间名::结构体成员

 2.2.3 命名空间的嵌套

对于极端的情况,比如自己定义的变量名和自己定义的变量名冲突,这种时候可以使用命名空间的嵌套:

namespace word
{//极端情况,自己定义名字自己冲突怎么办int rand= 6;//和上面冲突,命名空间可以嵌套namespace word1{int rand = 8;}}

2.2.4  同命名空间的合并

在一个文件中的多个位置或者多个文件中定义一个变量名的命名空间,内容会合并,同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 

 不会冲突 多个文件或者同一文件的多个位置的同名空间编译器会合并在一个命名空间中。

 

2.2.5 命名空间的使用

第一种就是上面讲解的预作用限定符的展开方式,不过如果每次都要这样写就会很麻烦:

2.2.5.1使用using namespace 命名空间名称 引入

如果说使用namespace是建一堵围墙,将命名冲突的东西分为墙内和墙外的,如果没有预作用限定符,某认使用的就是墙外也就是命名空间外的。如果使用时:

命名空间名::内容

这样的格式使用的是墙内的。

如果使用:using namespace 命名空间这种方式,那么就相当于直接将墙推倒回到没有建围墙的时候也就是说这样在使用的时候是会有风险引起命名冲突的。

而我们的命名空间是为了防止重定义这样的错误,当没有冲突的时候这样来使用是比第一种处处都要使用::是更加方便的:

using namespace ou;展开命名空间
小测试展开可以,但是大的工程建议不展开
using namespace std
std是官方库定义的命名空间,展开就可以随便用了
但是不是随随便便的展开,防止冲突,工程项目这样不会展开,项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用日常练习为了方便可以展开。
当上述两个都展开,就是库和我们定义的都展开的话,编译器会先到全局去找,找不到在依次在我们的这两个展开中去找,都找不到就报错,如果在两个地方都找到就会报冲突的错误。

每次指定命令空间很麻烦,但是展开又很危险,有冲突风险,那么我们就可以指定展开 

2.2.5.2使用using将命名空间中某个成员引入

在main函数外部使用:using 命名空间名::内容,后续使用这个内容可能会引发冲突,相当于展开了这个内容。编译器还是会优先到全局变量中去找再到这个命名空间中找,如果找到就会冲突:

using std::cout;
using std::endl;
//using stu::rand;
int rand = 10;int main()
{cout << rand << endl;

指定展开后后续就可以直接用了。

3.C++的输入&输出

c++的输入输出前提:

①std

std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中

(using nameplace std 也可以只单独展开

using std::cout

using std:: endl)

②#include<iostream>

在以前,并没有命名空间这个概念,而是将标准库功能定义在全局空间里,并声明在<iostream.h>(早期的C++头文件)中。但是由于标准库非常的庞大,那么程序员在选择的类的名称或函数名时,就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都放在一个名为std的命名空间中。后来C++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h,即出现了现在的<iostream>头文件。

3.1 C++输出使用:cout<<

 cout是全局的流对象,是流插入运算符,在c语言中,我们通常使用“\n”来实现换行操作,在c++中不仅仅可以使用“\n',还可以使用endl。且cout是自动识别类型的。

同样的由于c++语言是c语言成长起来的,同样支持c语言的语法也就是说支持我们使用printf这样的输出。

3.2 c++的输入 

scanf使用cin代替,流提取,自动识别类型,>>是流提取运算符

3.3 关于头文件 #include<iostream>

#include<iostream>是包含在std中的,std是C++标准库的命名空间,早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带.h;旧编译器(vc 6.0)中还支持格式,后续编译器已不支持,因 此推荐使用+std的方式。

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

4.结语 

以上就是本期所有内容对于命名空间的讲解,创作不易,大家如果觉得还可以的话,欢迎大家三连,有问题的地方欢迎大家指正,一起交流学习,一起成长,我是Nicn,正在c++方向前行的奋斗者,数据结构内容持续更新中,感谢大家的关注与喜欢。

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

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

相关文章

【嵌入式智能产品开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

目录 Raspberry Pi OS 下载系统镜像 使用SSH客户端登陆 升级更新 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正…

人工智能|深度学习——基于Xception实现戴口罩人脸表情识别

一、项目背景 近年来&#xff0c;随着人工智能技术的不断发展&#xff0c;人脸表情识别已经成为了计算机视觉领域中的重要研究方向之一。然而&#xff0c;在当前的疫情形势下&#xff0c;佩戴口罩已经成为了一项必要的防疫措施&#xff0c;但是佩戴口罩会遮挡住人脸的部分区域&…

换到idf 5.0版本后报错 jsmn could not be found

原因&#xff1a; idf5.0去掉了部分组件&#xff0c;包括jsmn&#xff0c;工程中adf又用到了这个组件&#xff0c;所以会报错。 解决办法&#xff1a; 升级adf到新版本即可。

docker导出导入镜像

docker导出镜像 查看要导出的镜像 docker images主要有两列 REPOSITORY TAG 导出命令 导出公式 docker save -o xxxx.tar REPOSITORY:TAG例子 docker save -o minio.tar minio/minio:latestminio/minio:latest可以使用image id代替&#xff0c;但是使用image id会导致导…

能效监测终端为什么这么好用?

能效监测终端是一种现代管理工具&#xff0c;它在企业和机构的能源管理体系中起着核心的作用。这些监测设备能够精确掌握用电设备的功耗情况&#xff0c;为用户实现节能减排和成本控制提供了有效的技术支持。以下内容将具体解释为什么能效监测终端如此好用&#xff0c;并从多个…

风声 | “革命”启动,这里是量子的新起点——

非洲正站在量子技术变革的前沿。 尽管非洲的量子安全技术尚未达到其他地区的先进水平&#xff0c;但它被视为未来计算技术发展的关键要素。如《福布斯非洲》所述&#xff1a;“量子计算目前的发展阶段&#xff0c;可以比喻为20世纪60年代的传统计算技术水平。” 非洲拥有众多的…

收下这份地表最强参会指南,4月16日,玩转百度Create大会不迷路

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…

vulnhub之devguru靶场提权过程(vulnhub打靶日记)

一、环境搭建 VM版本&#xff1a;17.5.1 build-23298084 攻击机&#xff1a;Kali2024&#xff08;下载地址&#xff1a;https://www.kali.org/&#xff09; 靶机&#xff1a;vulnhub靶场Devguru&#xff08;下载地址&#xff1a;https://www.vulnhub.com/entry/devguru-1,62…

C++——异常机制

目录 一&#xff0c;背景 1.1 C语言处理错误的方式 1.2 C异常概念 二&#xff0c;异常的使用 2.1 异常的简单使用 2.2 异常的匹配原则 2.3 异常抛对象 2.4 异常的重新抛出 2.5 异常安全 三&#xff0c;自定义异常体系 四&#xff0c;异常优缺点 4.1 优点 4.2 缺点 …

【爬虫框架Scrapy】02 Scrapy入门案例

接下来介绍一个简单的项目&#xff0c;完成一遍 Scrapy 抓取流程。通过这个过程&#xff0c;我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容…

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel 0.环境搭建补档NFS服务TFTP服务 一、linux kernel编译二、运行 0.环境搭建补档 linux kernel验证时&#xff0c;使用tftp服务从ubuntu主机下载启动更加方便&#xff0c;等到验证无误后再一次性烧写到tf卡。所以…

基于java+SpringBoot+Vue的校园交友网站设计与实现

基于javaSpringBootVue的校园交友网站设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 校园交友网站是一个为在校师生提供一个交流互动、寻找朋友的…

vue3+ts 调用接口,数据显示

数据展示 &#xff08;例&#xff1a;展示医院等级数据&#xff0c;展示医院区域数据同理。&#xff09; 接口文档中&#xff0c;输入参数 测试一下接口&#xff0c;发请求 看是否能够拿到信息 获取接口&#xff0c;api/index.ts 中 /home/index.ts // 统一管理首页模块接口 i…

ansible-自动化工具

一、ansible概述 不是C/S架构&#xff0c;就是一种工具 1&#xff1a;linux自动化运维 编写程序实现运维自动化&#xff1a;shell python 工具模式自动化&#xff1a; ①OS Provisioning&#xff1a; RedHat satellite&#xff1b;PXE&#xff08;可实现dhcp和tftp&#…

PFC交流电压跌落测试实现方法与仿真

目录 前言 交流电压跌落测试 仿真验证 总结 前言 之前双向交错的图腾柱仿真到代码生成系统验证已经实现&#xff0c;最近在学习如何解决交流电压跌落的问题&#xff0c;目前根据需要通过仿真实现了该工况的模拟&#xff0c;这里简单记录一下。 双向交错CCM图腾柱无桥单相PF…

Linux提权!!!

上一篇文章讲了Windows的提权&#xff0c;那么这篇文章就来讲一下Linux的提权 1.SUID提权 suid权限 作用&#xff1a;让普通用户临时拥有该文件的属主的执行权限&#xff0c;suid权限只能应用在二进制可执行文件&#xff08;命令&#xff09;上&#xff0c;而且suid权限只能设置…

HR是怎么看待PMP证书的呢?

考PMP证书为什么值得&#xff1f;对管理人员有用么&#xff1f; 首先&#xff0c;在行业内部&#xff0c;一名项目经理&#xff0c;需要有PMP证书已经是行业内的共识了。而且面试的时候&#xff0c;如果是同样的年龄段&#xff0c;同样的背景&#xff0c;那有证书在手的人&…

瑞吉外卖实战学习--13、完善删除中的逻辑

完善删除中的逻辑 前言效果图逻辑介绍表结构根据mybatisPlus接口规范创建实体类和service和mapper文件1、实体类Dish和Setmeal2、Mapper接口DishMapper和SetealMapper3、Service接口DishService和setmealService4、Service实现类DishServiceImpl和setmealServicelmpl 编写删除函…

【御控物联】JSON结构数据转换在物流调度系统中的应用(场景案例三)

文章目录 一、前言二、场景概述三、解决方案四、在线转换工具五、技术资料 一、前言 物流调度是每个生产厂区必不可少的一个环节&#xff0c;主要包括线边物流和智能仓储。线边物流是指将物料定时、定点、定量配送到生产作业一线的环节&#xff0c;其包括从集中仓库到线边仓、…

【详解】Windows系统安装Nginx及简单使用

【详解】Windows系统安装Nginx及简单使用 一、Nginx是什么&#xff1f; “Nginx 是一款轻量级的 HTTP 服务器&#xff0c;采用事件驱动的异步非阻塞处理方式框架&#xff0c;这让其具有极好的 IO 性能&#xff0c;时常用于服务端的反向代理和负载均衡。”Nginx 是一款 http 服…