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

news2025/3/19 20:36:36

前言

本系列文章承接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.coloradmin.cn/o/2317965.html

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

相关文章

Python F-String 深度解析:原理、用法与最佳实践

# Python F-String 深度解析&#xff1a;原理、用法与最佳实践 ## 一、引言 Python 的 F-String&#xff08;格式化字符串字面值&#xff09;自 3.6 版本引入以来&#xff0c;凭借其简洁性和高效性&#xff0c;迅速成为字符串格式化的首选方案。本文将从原理、核心用法和编码规…

20. Excel 自动化:Excel 对象模型

一 Excel 对象模型是什么 Excel对象模型是Excel图形用户界面的层次结构表示&#xff0c;它允许开发者通过编程来操作Excel的各种组件&#xff0c;如工作簿、工作表、单元格等。 xlwings 是一个Python库&#xff0c;它允许Python脚本与Excel进行交互。与一些其他Python库&#x…

解决uni-app授权弹框华为审核拒绝

背景&#xff1a; 在使用定位、相机、文件、电话&#xff0c;需要用户同意授权时&#xff0c;华为和vivo需要告知用户使用权限目的。 方案&#xff1a; 在uni授权时&#xff0c;弹框告诉授权目的&#xff0c;效果如下&#xff1a; 代码&#xff1a; const perListener {//…

施耐德PLC仿真软件Modbus tcp通讯测试

安装仿真软件&#xff1a;EcoStruxure™ Control Expert - PLC 仿真器 下载地址&#xff1a;https://www.schneider-electric.cn/zh/download/document/EIO0000001719/ 配置CPU&#xff1a; 切换至仿真模式&#xff0c;系统托盘中出现仿真器图标 新建变量test&#xff0c;地址…

1.排序算法(学习自用)

1.冒泡排序 算法步骤 相邻的元素之间对比&#xff0c;每次早出最大值或最小值放到最后或前面&#xff0c;所以形象的称为冒泡。 特点 n个数排序则进行n轮&#xff0c;每轮比较n-i次。所以时间复杂度为O(n^2)&#xff0c;空间复杂度为O(1)&#xff0c;该排序算法稳定。 代码…

vs2017版本与arcgis10.1的ArcObject SDK for .NET兼容配置终结解决方案

因电脑用的arcgis10.1,之前安装的vs2010正常能使用AO和AE&#xff0c;安装vs2017后无法使用了&#xff0c;在重新按照新版本arcgis engine或者arcObject费时费力&#xff0c;还需要重新查找资源。 用vs2017与arc10.1的集成主要两个问题&#xff0c;1&#xff1a;安装后vs中没有…

基于yolo11+flask打造一个精美登录界面和检测系统

这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示&#xff0c;代码仅仅有2个html文件和一个python文件&#xff0c;真正做到了用最简洁的代码实现复杂功能。 测试通过环境&#xff1a; windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件&#xff0c;如今3年过去了&#xff0c;计划使用Vue 3.5 TypeScript 把组件重新开发&#xff0c;有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…

深入解析 SQL 事务:确保数据一致性的关键

SQL 事务 什么是 SQL 事务&#xff1f;事务的 ACID 特性原子性&#xff08;Atomicity&#xff09;:示例&#xff1a; 一致性&#xff08;Consistency&#xff09;:示例&#xff1a; 隔离性&#xff08;Isolation&#xff09;:持久性&#xff08;Durability&#xff09;:示例&am…

基于STM32的火灾报警设备(阿里云平台)

目录 前言&#xff1a; 一、项目介绍和演示视频 二、硬件需求准备 三、硬件框图 1. 原理图 2. PCB 四、CubeMX配置 五、代码框架 前言&#xff1a; 源代码下载链接&#xff1a; https://download.csdn.net/download/m0_74712453/90474701 需要实物的可以私信博主或者…

FPGA-流水灯

Quartus中使用Verilog实现 根据之前所学内容&#xff0c;打开Quartus 软件&#xff0c;新建FPGA项目文件&#xff0c;建立好空项目过后&#xff0c;选择Verilog HDL File&#xff0c;因为我们要使用Verilog代码实现仿真。 详细操作可参考往期博客&#xff1a; FPGA 实验报告&a…

browser-use WebUI + DeepSeek 基于AI的UI自动化解决方案

browser-use WebUI 一、browser-use是什么Browser-use采用的技术栈为&#xff1a; 二、browser-use webui 主要功能使用场景 三、使用教程1.python 安装2、把项目clone下来3、安装依赖4、配置环境5、启动6、配置1.配置 Agent2.配置要用的大模型3.关于浏览器的一些设置 四、Deep…

什么是YApi?开源接口管理平台部署教程

YApi 到底是个啥&#xff1f; 各位小伙伴们好呀&#xff01;今天要给大家介绍的是一款超级好用的接口管理神器——YApi&#xff01;它是一个高效、易用、功能强大的 API 管理平台&#xff0c;简直就是开发、产品、测试人员的福音啊&#xff01;&#xff01;&#xff01;它能帮…

深入理解事务

在数据库管理中&#xff0c;事务是一个至关重要的概念。无论是金融交易、库存管理还是用户数据更新&#xff0c;事务都确保了数据的完整性和一致性。本文将详细介绍为什么需要事务、什么是事务、事务的四大特征、如何在MySQL中使用事务以及MyBatis对事务的配置。 一、为什么需…

基于SpringBoot + Vue 的药店药品信息管理系统

基于SpringBootVue的药品药店药房信息系统(带文档) 角色: 用户&#xff0c;管理员&#xff0c;员工 功能: 管理员: 首页、个人中心、用户管理、员工管理、药品类别管理、药品信息管理、药品入库管理、药品出库管理、在线咨询管理、留言板管理、系统管理、订单管理。 用户:…

ubuntu下TFTP服务器搭建

tftp 命令的作用和 nfs 命令一样&#xff0c;都是用于通过网络下载东西到 DRAM 中&#xff0c;只是 tftp 命令 使用的 TFTP 协议&#xff0c; Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器&#xff0c; 需要安装 tftp-hpa 和 tftpd-hpa&#xff0c;命令…

解决:ModuleNotFoundError: No module named ‘_sqlite3‘

报错&#xff1a; from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3安装sqlite3支持组件: sudo apt-get install libsqlite3-dev进入之前下载的python包下&#xff0c;重新编译和安装Python ./configure --enable-loadable-sqlite-extensions make &a…

技术债务的隐患:何时重构,何时妥协?

在快节奏的软件开发环境中&#xff0c;企业为了抢占市场或满足紧迫需求&#xff0c;往往不得不在短期内采取“捷径”来加速产品交付&#xff0c;这便引入了“技术债务”。短期内看似能迅速交付&#xff0c;但随着时间推移&#xff0c;这些未优化的代码和架构缺陷会逐渐累积&…

c#Winform也可以跨平台了GTK框架GTKSystem.Windows.Forms

一、简介 >> 新版下载&#xff0c;问题求助 QQ群&#xff1a;1011147488 1032313876 236066073&#xff08;满&#xff09; Visual Studio原生开发&#xff0c;无需学习&#xff0c;一次编译&#xff0c;跨平台运行. C#桌面应用程序跨平台&#xff08;windows、linux、…

ABAP PDF预览

画个屏幕 PDF JPG TXT都可以参考预览&#xff0c;把二进制流传递给标准函数就行 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *&am…