当前位置: 首页 > news >正文

【C++】--入门

前面我们学习C语言的时候,我们也有讲过C++的部分历史,我们看其名字就知道其和我们的C语言肯定是有密不可分的关系的,我们的C++是在C的基础上发展的,其弥补了C语⾔在表达能⼒、可维护性 和可扩展性⽅⾯的不⾜。

下面为C++的近年来的几次更新:

 其在前面的时候,我们会发现其是五年一个更新,不过我们发现在C++11的版本后,其又变成了3年一个更新。这是因为在后面其对于一些功能的优化和实现变得越来越复杂,后面C++团队就从变成了,三年一个更新。

一、C++的第一个程序

前面我们刚刚开始学习C语言的时候,我们的第一个程序是在屏幕上打印Hello  world,下面我们也一样使用C++在屏幕上实现这个功能。

下面我们将C语言和C++的都实现一遍,然后我们来看看这两个语言的区别。

代码如下:

我们发现其要在屏幕上打印Hello world代码还是有很大差异的,首先就是其多了using namepace std;语句,然后其是使用的cout来进行打印的。对于这几个不同的我们下面会进行详细的讲解。

这里我们要知道的是:

C++兼容C语⾔绝⼤多数的语法,所以C语⾔实现的hello world依旧可以运⾏,C++中需要把定义⽂件 代码后缀改为.cpp,vs编译器看到是.cpp就会调⽤C++编译器编译,linux下要⽤g++编译,不再是gcc。

二、命名空间

 1、namespace的意义

在C\C++中,变量、函数和后面我们要学到的类都是大量存在的,这些变量、函数、和类的名称将都存在于全局作用域中、那么就可能会导致我们的名称会有重复的,我们使用命名空间的目的是对标识符的名称进行进行本地化,以避免命名冲突或命名污染,namespace的出现就是为了解决这个问题的。

如下:

我们运行这个代码,那么程序就会报错,这是因为头文件stdlid.h中有一个函数名为rand的函数,那么我们定义的全局变量就和这个函数的名字冲突了,导致的无法编译。

那么当我们将这个头文件去掉后,那么我们就可以顺利的在屏幕上将10打印出来了。

2、namespace的定义

  • 定义命名空间需要用到namespace关键字,然后后面跟命名空间的名字,然后接上一对{}即可,{}中即为命名空间中的成员。命名空间中可以定义变量\函数\类型等。
  • namespace本质上是一个域,这个域和全局域是独立的,不同的域可以定义同名变量。
  • C++中域有函数局部域,全局域,命名空间域,类型;域影响的是编译的时候语法查找一个变量\函数\类型出处(声明或定义)的逻辑,所以有了域隔离,那么名字冲突就解决了。局部域和全局域除了会影响编译查处逻辑,还会影响变量的生命周期,命名空间和类域不影响变量生命周期。
  • namespace只能定义在全局,,当然其还可以嵌套定义。
  • 项目工程中多文件中定义的同名namespace会认为其是一个namespace,不会冲突
  • C++标准库都放在一个叫std的命名空间中

3、命名空间的使用

上面我们学习了命名空间的定义,那么我们定义好一个命名空间后,我们要如何进行使用呢?

1、指定命名空间访问,项目中我们推荐使用这种方式

如下:

2、using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐使用这种方式。

如下:

 

相当于函数的声明一样,告诉编译器我们代码中有这个东西。

3、展开命名空间中的所有成员,项目中不推荐这种方式,容易产生冲突,日常的练习和程序还可以使用。

 

 三、C++输入和输出

 首先我们的C++是兼容C的大部分语法的,所以我们在C++中也可以通过包含其头文件调用C语言中的库函数。

然后我们的C++其也有属于其自己的输入输出方式:

1、使用cout标准输出对象,和cin标准输入对象,要注意的是我们要使用这两个标准输出输入流,必须要包含头文件,还有按命名空间使用方法包含std。

2、cout 和 cin 是全局的流对象,endl 是特殊的C++符号,表示换行输出,他们都包含在包含

    iostream 头文件中。

3、<<是流插入运算符,>>是流提取运算符

4、使用C++的cout和cin会比C语言的printf和scanf要方便一点,我们不需要再去使用占位符确定输出和输入的数据类型,cout和cin其会自动识别这些数据是什么类型的。

5、在一些算法竞赛中,如果要经常进行数据的输入和输出的话,那么我们推荐使用C语言的printf和scanf,后面我们会讲到。

http://www.lryc.cn/news/579199.html

相关文章:

  • 欧拉角、四元数和旋转矩阵的变换关系以及无人机的坐标变换
  • 如何在Excel中每隔几行取一行
  • sqlmap学习笔记ing(3.[MoeCTF 2022]Sqlmap_boy,cookie的作用)
  • LeetCode Hot 100 滑动窗口 【Java和Golang解法】
  • 鸿蒙开发技巧---去除字符串两端的空格
  • AI大模型如何重塑软件开发流程?从自动化革命到人机共生范式
  • 怎样理解:source ~/.bash_profile
  • 深入Flink核心概念:解锁大数据流处理的奥秘
  • SAP WM LT10 TO创建增强
  • Android Auto即将带来变革
  • Agno(一)
  • 机器学习在智能制造业中的应用:质量检测与设备故障预测
  • Vue + RuoYi 前后端分离入门手册
  • Ubuntu云服务器上部署发布Vite项目
  • Redis基础(1):NoSQL认识
  • 端到端自动驾驶系统关键技术
  • 开发自动驾驶系统所需工具
  • 2025美国券商交易系统综合开发及解决方案报告:低延迟、全球化与代币化技术赋能机构业务新生态
  • “山河”应急指挥决策AI智能体 - 全生命周期构建实施说明
  • 轻松上手:使用Nginx实现高效负载均衡
  • python中的pydantic是什么?
  • 逆向入门(25、26)程序逆向篇-KeygenMe,MexeliteCRK1
  • Linux基本命令篇 —— alias命令
  • MIT协议开源CRM系统:打造高效客户关系管理解决方案
  • 【Vue入门学习笔记】项目的创建与基础认识
  • 存储过程封装:复杂业务逻辑的性能优化
  • 基于 TOF 图像高频信息恢复 RGB 图像的原理、应用与实现
  • 监测检测一体化项目实践——整体功能规划
  • 物联网实战:多语言(Java、Go、Rust、C++、C#、Rust)设备接入与数据处理
  • macOS挂载iOS应用沙盒文件夹