C++练级之初级:第一篇

C++是基于C语言的,由BjarneStroustrup发明,引入了面向对象编程。它包括C语言的功能,同时支持类和面向对象编程。C++的重要性和应用广泛,涉及操作系统、游戏开发、嵌入式系统和人工智能等领域。命名空间用来解决命名冲突问题,如图所示,通过指定访问或命名展开来管理不同域的访问。C++中的输入输出函数如`cin`和`cout`通常需要与`std`命名空间一起使用。
摘要由CSDN通过智能技术生成

C++练级之初级:第一篇

1.什么是C++

在回答这个问题前,你是否听过C语言,C++,C#,Java这些词呢?你知道这些词有什么联系吗?
在这里插入图片描述

🤔那么什么是C++呢?

我们知道C语言是模块化和结构化的语言,一般用于规模小的项目,对于大的项目,我们需要高度的抽象和建模,那么C语言肯定不好搞,为了解决这个问题,计算机界引入了面向对象的思想(objict oriented programming),C++是基于C语言引入并扩充了面向对象的概念,为了表达它与C语言的渊源关系,顾命名为C++。
因此: C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

🤔🤔那么你知道C++是谁发明的吗?

在这里插入图片描述
图片上的大佬叫:Bjarne Stroustrup

1982年,Bjarne Stroustrup博士,在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

🤔🤔🤔你知道面向对象与面向过程的思想是什么吗?

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;

  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为;
    在这里插入图片描述

  • 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。

  • 面向对象的设计则是从另外的思路来解决问题,整个五子棋可以分为:1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。

发现:面向对象更接近于人的思维


2.C++的发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes,但是还并未标准化,因此我们主要介绍一下重要的两个版本:C++98和C++11

在这里插入图片描述

🤔👉什么是STL?

STL(Standard Template Library):C++中的标准模板库,里面包含算法库和数据结构库。
这也就意味着我们以后可以直接用数据结构库了,不用自己手写一个数据结构。


3.C++的重要性

🤔C++有多重要呢?

1.2023年4月语言排行

在这里插入图片描述
2.各种语言的发展变化
在这里插入图片描述
注意: 排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景。
由以上两张图,我们不难看出C++是主流语言之一,我们也能看出C++语言发展的比较艰难。


🤔🤔你好奇C/C++的应用吗?

  1. 操作系统以及大型系统软件开发所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件。

  2. 服务器端开发
    后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用C++开发的。

  3. 游戏开发
    PC(personal computer)平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CS、跑跑卡丁车等,市面上相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。三维游戏领域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性搞,这些高难度需求无疑只能选C++语言。比较知名厂商:腾讯、网易、完美世界、巨人网络等。

  4. 嵌入式和物联网领域
    嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
    常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程师、固件开发工程师等。

  5. 人工智能
    一提到人工智能,大家首先想到的就是python,认为学习人工智能就要学习python,这个是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据就可以开始训练模型
    了。但人工智能背后深度学习算法等核心还是用C++写的。


此外还有,数字图像处理,分布式应用,科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。


4.C++中的命名空间(namespace关键字)

注释:前面几篇都是在解决C语言的不足

🤔命名空间是解决C语言什么问题呢?

在这里插入图片描述
在这里插入图片描述


从上面两张图不难看出,C++的命名空间是_解决命名冲突问题_的,第一张图是我们定义的变量与库函数冲突,第二张图是两个程序员之间的命名冲突。

🤔🤔在学习命名空间域之前,你知道什么是域吗?

在这里插入图片描述


域:相当于一块空间,比如局部域,全局域,命名空间域,类域等等;

🤔🤔🤔怎么解决上述命名冲突的问题?命名空间域的书写形式是什么?

  • 首先是书写方面:
    在这里插入图片描述

  • 其次,如何解决上述问题

在这里插入图片描述

在这里插入图片描述

🤔🤔🤔那么访问域有没有什么优先访问规则?

在这里插入图片描述在这里插入图片描述

我们知道,在C语言中我们默认是先访问局部域的,局部域没有再去访问全局域,C++同样如此,但注意C++是不会去主动访问命名空间域中的内容的;


🤔🤔🤔🤔那么我们能不能直接去访问全局域或命名空间域呢?

使用操作符(两个冒号) :: (域作用限定符)


在这里插入图片描述

👉访问命名空间域的方法总结

  1. 用上述讲的指定访问法

在这里插入图片描述

  1. 命名展开
    在这里插入图片描述
    在这里插入图片描述
    但是,展开了命名空间又有可能产生命名空间问题,所以我们在大型项目中一般用指定访问法,在平时练习中用命名展开法;
    注意:
    如果两个命名空间域的标签名相同,则进行合并同类型;

在这里插入图片描述

🤔🤔🤔🤔🤔C++一般有文件怎么写?

在这里插入图片描述
为什么用.h就报错了?
因为,在老版的编译器下是支持的,但是为了区分C++和C语言我们采用了不加.h,而且在C语言中有string.h在C++中但两个头文件是不一样的,所以我们去除了.h;

5.C++中的输入输出函数

在这里插入图片描述

🤔头文件我们包含了,为什么用不了?

因为,头文件的包含是在预处理阶段进行拷贝操作,即把头文件包含的内容拷贝到你的文件中,但是cout和cin函数是在命名空间域std里的,std包含C++标准库和STL模板库;
所以要使用cin,cout函数就需要展开命名空间域,或者指定操作,或者展开部分;

  1. 展开命名空间域(一般练习写)

在这里插入图片描述

  1. 指定操作(大项目写)

在这里插入图片描述

  1. 展开部分(介于上面两者之间,推荐)
    在这里插入图片描述

但是,cout是比printff慢一点点,因为cout是先放在缓存区的,等缓存区放满了再输出,但是printf在windows环境下是直接输出的,因为C++是兼容C语言的所以cout和printf的频繁调用会影响性能,我们可以关闭同步;

总结

今天主要介绍了C++是什么,C++的发展,C++的重要性,空间命名域,C++中的输入输出函数;

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值