从C语言开始的C++编程生活(1)

ops/2025/3/19 9:23:01/

前言

本系列文章承接C语言的学习,需要有C语言的基础才能学会哦。
第1篇主要讲的是有关于C++的命名空间、输入和输出
C++才起步,都很简单呢!



 目录

前言

命名空间namespace

基本语法

作用

使用命名空间

域作用限定符 ::

基本语法

using namespace 命名空间域名

基本语法

作用

using 命名空间域名 :: 变量名

基本语法

作用

C++的输入和输出

“<< ”流插入符

基本语法

代码解释

“ >>”流提取符

基本语法

代码解释


命名空间namespace

基本语法

namespace space_name
{int a = 0;float b = 0;int Add(int a, int b){printf("%d", a + b);}
};

这段代码定义了一段名为space_name的命名空间,该命名空间内包含了整型变量a,单精度浮点型b和函数Add。

作用

知识点补充:
①不同的变量因为编写时所处的位置不同,可能会处于不同的作用域。作用域有全局域、函数局部域、这一部分讲到的命名空间域还有后面会学到的类域。
②变量在不同域中命名,是可以重复的,编译时也不会报错。
③写好的代码在进行编译的时候,编译程序会按照顺序查找变量、函数的标识符(名称)。默认的查找顺序是:函数局部域------>全局域(------>命名空间域)。命名空间域,编译程序默认是不查找的。

创建一个新的域,与全局域和其他域隔离开来,从而达到重复命名变量或者函数的目的。

​#include<stdio.h>
int a = 222;
namespace space_name
{int a = 333;float b = 0;int Add(int a, int b){printf("%d", a + b);}
};int main()
{int a = 111;printf("%d", a);return 0;
}​

 使用同上的命名空间域,我们可以发现,代码里同时存在两个变量a且没有发生报错,并且main函数输出a时,输出的是main函数局部域里的a

ps:在实际的工作中,编写一个程序可能会产生几万行甚至更多的代码量,如此多的代码量,只让一个程序员来维护是不现实的。而当多名程序员编写代码时,容易因为命名冲突导致程序无法运行,仅靠协商来处理十分没有效率。因此就需要使用到命名空间,将每个程序员的变量或者函数命名放在不同的命名空间域中进行隔离。每个程序员使用自己命名空间里的变量就不会担心重复命名了。

使用命名空间

Q:上文代码在main函数里,输出了main函数局部域里的a,那我们要如何才能使用在命名空间域里的a呢?

由于编译系统在确定变量的时候,首先在局部域内查找变量的标识符,在main函数里找到之后了一个a之后便不会再继续查找。所以直接使用a的话,程序只能访问到main函数里的a。所以我们就要使用域作用限定符

域作用限定符 ::

基本语法
//没有 :: ,默认先去局部域找,再去全局域找,但是不回去,命名空间域找
printf("%d\n", a);
//使用了 :: ,但是 :: 前没有命名空间域名,因此只在全局域找
printf("%d\n", ::a);
//使用了 :: ,而且 :: 前有命名空间域名,因此只在space_name中找
printf("%d\n", space_name::a);

通过这段代码我们就可以依次输出main函数里面的a、全局域的a以及命名函数里的a。

由此可见,只有 :: 出现的时候,编译程序才会去命名空间域中查找变量。
而全局域实际上是一个特殊的命名空间域,如果我们用第二行代码的方法去访问space_name中的变量的话,

printf("%f", ::b);

会有如此报错:

global namespace就是全局域的意思。


Q:每次使用命名空间域里面的变量,都要加命名空间域名和 :: ,那不是很麻烦吗?
A:对于公司里面进行的大工程,这一点小麻烦可以避免更大的麻烦,所以是一种不得不采取的有效措施。但是如果是自主学习时编写的小型程序,就可以用一些小方法来避免这个小麻烦。

using namespace 命名空间域名

基本语法
using namespace space_name;//使用整个space_name命名空间域
作用

让程序在全局域中找完变量后继续去指定的命名空间域中查找。这样做,相当于将整个命名空间域都放进全局域中,取消命名空间域和全局域之间的隔离。如果全局域和命名空间域里的变量有重复,就会报错。

这种方法看上去固然危险,所以我们还有一个方法。

using 命名空间域名 :: 变量名

基本语法
using space_name::a;//使用space_name域中的变量a
作用

与上一种方法相比,这种方法只选择使用一个变量,其他变量仍然需要用 :: 查找。这样至少可以保证其他变量是安全的。但是同样的,选择使用的命名空间域变量和全局域变量有重复也会有相同报错。

综上所述,我们要根据具体情况来选择要不要使用这两个语句哦!

C++的输入和输出

c++的输入和输出需要包含头文件<iostream>
(其中包含了stdio.h,也就是说可以使用C语言里面的输入输出函数。但具体要看编程的平台,VS是包含了的)

C和C++同根同源,因此C的大部分语法和库函数,C++都可以使用。但本文承接C语言的学习,所以只讲C语言里没有的。

“<< ”流插入符

基本语法

int i = 111;
std::cout<<"hello"<<" world\n"<< i << std::endl;

这段代码依次把字符串”hello“、” world\n”,整型变量 i ,和std::endl插入到了输出流std.cout中,输出结果为(111后有换行):

 

代码解释

①std::cout指的是命名空间域std里的coutstd为C++标准库的命名空间域cout全称是character output stream,也就是字符输出流
②‘<<’流插入符将后续的字符都插入到输出流,从而将其输出。
③i是整型变量,用‘<<'插入之后,程序自动将其变为字符串,再插入到输出流
(   类似于printf("%d",i);  )。
std::endl是一个函数返回一个换行符并且刷新缓冲区。在不同的平台,换行符的表示形式可能不同。这个函数可以识别不同的平台,再根据你的平台返回对应的换行符这个函数比直接使用'\n'换行更加安全可靠,还附带刷新缓冲区的功能,推荐使用!!
⑤无法对输入流使用’<<‘,输入流不支持,会报错。
⑥要想进行格式化输出,前期学习还是推荐使用printf函数。

“ >>”流提取符

基本语法

int i = 0;
int a = 0;
std::cin >> i >> a;

这段代码让程序一次从输入流里读取数据,并且给变量 i 和 a 赋值。

代码解释

①std::cin同上,而cin全称是character input stream,也就是字符输入流
一个“<<”读取一次


❤~~本文完结!!感谢观看!!欢迎来我博客做客~~


http://www.ppmy.cn/ops/166996.html

相关文章

【错误解决】ollama使用huggingface拉取模型异常

ollama使用huggingface拉取模型异常 方法1 替换镜像网址&#xff0c;将hf.co替换为hf-mirror.com 如&#xff1a; ollama run hf.co/Polaris614/fortunetelling替换为&#xff1a; ollama run hf-mirror.com/Polaris614/fortunetelling方法2 开全局代理

第29周 面试题精讲(4)

Java面试题详解 一、简单工厂和工厂方法到底有哪些不同&#xff1f; 问题&#xff1a;简单工厂和工厂方法有哪些区别&#xff1f; 答案&#xff1a; 简单工厂&#xff1a; 通过一个工厂类实现对象创建&#xff0c;隐藏创建细节。所有对象创建基于一个方法&#xff0c;通过参…

轨迹优化 | 基于梯度下降的路径规划算法(附ROS C++/Python仿真)

目录 0 专栏介绍1 梯度下降路径规划2 代价势场生成方法3 算法仿真3.1 ROS C仿真3.2 Python仿真 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xff1a;曲线生成、碰撞检测、安全…

微软 LIDA 库:基于大模型的自动化数据分析与可视化

微软 LIDA 库&#xff1a;基于大模型的自动化数据分析与可视化 一、核心架构与 LLM 交互流程 #mermaid-svg-UzSwZNKPlgrJUpej {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UzSwZNKPlgrJUpej .error-icon{fill:#5…

【原创】使用ElasticSearch存储向量实现大模型RAG

一、概述 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;已成为大型语言模型&#xff08;LLM&#xff09;应用的重要架构&#xff0c;通过结合外部知识库来增强模型的回答能力&#xff0c;特别是在处理专业领域知识、最新信息或企业私有数…

再学:函数可见性、特殊函数、修饰符

目录 1.可见性 2.合约特殊函数 constructor && getter 3. receive && fallback 4.view && pure 5.payable 6.自定义函数修饰符 modifier 1.可见性 public&#xff1a;内外部 private&#xff1a;内部 external&#xff1a;外部访问 internal&…

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优&#xff0c;而是通过局部最优的累积来逼近最终解。优点是简单高效&#xff0c;缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱&#xff1a;用最少数量的…

代码随想录算法训练营第六十五天| 图论10

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 代码随想录 import collectionsdef main():n, m map(int, input().strip().split())edges [[] for _ in range(n 1)]for _ in range(m):src, dest, weight map(int, input().strip().split())edges[src].append…