【C++】--入门

发布于:2025-07-03 ⋅ 阅读:(21) ⋅ 点赞:(0)

前面我们学习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,后面我们会讲到。


网站公告

今日签到

点亮在社区的每一天
去签到