C++ (Chapter 1)

C++ (一)

1.C++的命名空间

先来看一个C语言的例子:

下面这段代码是可以正常运行的.

#include<stdio.h>
int rand = 0;
int main()
{printf("%d \n", rand);return 0;
}

但是,包含了一个头文件之后,甚至无法通过编译.

#include<stdio.h>
#include<stdlib.h>
int rand = 0;
int main()
{printf("%d \n", rand);return 0;
}

在这里插入图片描述

根据报错信息来看,rand本来是stdlib库中的一个库函数,但是这里我们也创建了一个叫做rand的变量,所以这里在执行printf语句时,就无法辨别rand到底是哪个了.

假若有人在项目中恰好就将某个变量名或者函数名设置成了与库中一样的名字,可就惨了,因为C语言本身是没有办法自己去解决这个问题的,只能我们主动避免.

命名空间的定义:所以为了解决上述出现的情况,C++中出现了命名空间.我们可以主动将我们声明的变量和函数等都写入这个命名空间中:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%p \n", rand);return 0;
}

执行结果:
在这里插入图片描述

注意:当我们想要访问的是命名空间内的变量或函数时,需要在变量/函数名之前加上 命名空间名字::,否则就是到命名空间之外去寻找该变量/函数,例如:

#include<stdio.h>
#include<stdlib.h>
/*定义命名空间的格式:namespace 命名空间的名字{....}
*/
namespace Space
{int rand = 0;
}
int main()
{printf("%d \n", Space::rand);return 0;
}

执行结果:
在这里插入图片描述

例如:在下面这段代码中,在命名空间之内定义了一个Add函数,假若我们就只写一个 Add(1,3);,这样是会报错的,因为没有在其之前指明 Space::,所以编译器会默认到命名空间之外去找, 而在命名空间Space之外并没有Add函数,所以就报错.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Add(1, 3);return 0;
}

修正方案:

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}
}
int main()
{printf("%d \n", Space::rand);Space::Add(1, 3);return 0;
}

命名空间的嵌套以及访问

假如命名空间之内还有一个命名空间,我们应当如何去访问最里层命名空间里的内容呢?

例如:访问如下命名空间里的Div函数.

#include<stdio.h>
#include<stdlib.h>
namespace Space // 外层
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 //里层{void Div(int x, int y){printf("%d", x - y);}}
}

访问命名空间:方法一:加命名空间名称以及作用域限定符.

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
int main()
{printf("%d \n", Space::rand);Space::Space1::Div(1, 3);return 0;
}

访问命名空间:方法二:使用using将命名空间某个成员引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
using Space::Space1::Div;
int main()
{printf("%d \n", Space::rand);Div(1, 3);return 0;
}

访问命名空间:方法三:使用using namespace 命名空间名称 引入

#include<stdio.h>
#include<stdlib.h>
namespace Space
{int rand = 0;void Add(int x, int y){printf("%d ", x + y);}namespace Space1 {void Div(int x, int y){printf("%d", x - y);}}
}
//引入命名空间Space1
using namespace Space::Space1; 
//引入命名空间Space
using namespace Space;
int main()
{printf("%d \n", Space::rand);Add(1, 3);Div(1, 3);return 0;
}

2.C++的输入和输出

先来看看C++是如何输入和输出的吧!

#include<iostream>
using namespace std;
int main()
{int a = 0;cout << "hello world" << endl;cin >> a;return 0;
}

注意:std是C++标准库的命名空间名称,C++将标准库的定义实现都放到了这个命名空间中,而这里的coutendl都是在std标准库中定义的,有了 using namespace std;语句,就可以直接访问该定义了,不需要我们再手动加上命名空间名称和作用域限定符了.

这里特别说明:

  • 使用cout进行输出时,必须包含iostream头文件.
  • coutcin以及endl都是包含在iostream中的.

std命名空间的使用惯例:

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

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

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

相关文章

Maven下载与文件配置

文章目录 官网下载相应文件修改配置文件设置环境变量 官网下载相应文件 https://maven.apache.org/ 点击Download ,找到Files 下载好了&#xff0c;请解压&#xff0c;放在你需要存储的位置&#xff01; 修改配置文件 打开解压的文件&#xff1a; 在conf 下有一个setting…

TensorFlow案例学习:对服装图像进行分类

前言 官方为我们提供了一个 对服装图像进行分类 的案例&#xff0c;方便我们快速学习 建议按顺序观看&#xff0c;这是一个小系列&#xff0c;适合像我这样的初学者入门 配置环境&#xff1a;windows环境下tensorflow安装 图片分类案例学习&#xff1a;TensorFlow案例学习&…

沪深300期权一个点多少钱?

经中国证监会批准&#xff0c;深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约&#xff0c;下文介绍沪深300期权一个点多少钱?本文来自&#xff1a;期权酱 一、沪深300期权涨…

推荐几个技术学习的网站

USB中文网 点击打开 USB中文网 - USB技术开发交流USB中文网是国内领先的专业USB技术网站&#xff0c;提供USB开发入门教程&#xff0c;USB设备开发&#xff0c;USB驱动开发&#xff0c;USB摄像头&#xff0c;USB麦克风&#xff0c;USB存储设备&#xff0c;USB-HID设备&#x…

华为认证 | HCIP-Datacom,这门认证正式发布新版本!

华为认证数通高级工程师HCIP-Datacom-Campus Network Planning and Deployment V1.5&#xff08;中文版&#xff09;自2023年9月28日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司…

随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展

原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中&#xff0c;OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练&#xff0c;学习底层模…

Vega Prime入门教程14.04:CDB测试

本文首发于&#xff1a;Vega Prime入门教程14.04&#xff1a;CDB测试 打开失败 打开vpcdb_yemen_urban.acf 会报错 点击确定后会显示默认界面 这个白天蓝海应该是默认场景。 开启服务 打开LP&#xff0c;点击菜单栏或者工具栏 显示管理界面 切换至rtp界面 点击Start RTP按…

牛客 明明的随机数

HJ3 明明的随机数 原题思路代码运行截图收获 原题 HJ3 明明的随机数 思路 如果是C的话直接用set结构体就可以自动排序GO&#xff1a;用一个501的数组存储是否出现&#xff0c;最后从头开始输出出现过的数字 代码 #include <iostream> #include <set> using na…

html与css知识点

html 元素分类 块级元素 1.独占一行&#xff0c;宽度为父元素宽度的100% 2.可以设置宽高 常见块级元素 h1~h6 div ul ol li dl dt dd table form header footer section nav article aside 行内元素 1.一行显示多个 2.不能设置宽高&#xff0c;宽高由元素内容撑开 常见行内…

【Linux服务端搭建及使用】

连接服务器的软件&#xff1a;mobaxterm 设置root 账号 sudo apt-get install passwd #安装passwd 设置方法 sudo passwd #设置root密码 su root #切换到root账户设置共享文件夹 一、强制删除原有环境 1.删除python rpm -qa|grep pytho…

SLAM从入门到精通(ROS和底盘Stm32的关系)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学过Ros的同学&#xff0c;一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话&#xff0c;还会知道slam、move_base、…

macOS Sonoma 14.1beta3(23B5067a)发布

黑果魏叔10 月 11 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23B5067a&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 根据官方发布的macOS Sonoma 14.1beta3更新日志&#xff0c;此…