【是C++,不是C艹】 什么是C++ | C++从哪来 | 学习建议

简介: 什么是C++ | C++从哪来 | 学习建议

前言:

我知道你急着学C++,但你先别急,薛之谦认识认识C++还是很有必要的。本期跟大家聊一聊C++的发展史,最后提一些学习建议~

注:

你最好是学完了C语言,并学过一些初阶的数据结构。



Part1:什么是C++


“C++是什么,能吃吗?”       这样想的童鞋先去找食堂阿姨盛两碗饭


1.区分几个带C的语言


我发现身边经常有小伙伴分不清C/C++,C#等语言,甚至把C/C++说成是一种语言,

额,我只能笑笑... ...

所以在这里区分几个语言还是挺有必要的:

C语言:1972年,贝尔实验室的丹尼斯·里奇在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

C++:最早于1979年由本贾尼大佬在AT&T贝尔工作室研发,在C语言的基础上做了很大的改良,但语法绝大部分又是与C语言相通的,因此你会经常看到 C/C++ 这样的写法。

C#:2000年由微软公司发布,它在继承C和C++强大功能的同时去掉了一些它们的复杂特性,而且你发现没,#其实就是++++合并起来的。(奥对了,“C#”读作“C sharp”)

49d8bc02b82e780ddcfb585a19698c4d_c23a8d9a9d7f46598ae619044dfdcaf0.png


2.C++为何诞生


C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。

为了解决软件危机, 20 世纪 80 年代, 计算机界提出了 OOP(object oriented programming :面向对象 ) 思想,支持面向对象的程序设计语言应运而生。


简单来说,随着计算机技术的发展,程序越来越复杂,对于复杂的程序,C语言不合适。

有一位大佬看到这种情况,就想:那我就创造一个可以适用于复杂程序的语言吧!

他就是 Bjarne Stroustrup ,本贾尼大佬:

d08a2604a6101f1c46a0d4dcfe4dea77_96d221b9c1e843af807cf35884583981.jpeg

感谢大佬能让我混口饭吃🤣

到这里,不妨让我们撇一眼隔壁Java之父:

4bce88ef427426f822206d610893488b_7b128ceef84641b18d1a294c803909ae.png

左:Bjarne Stroustrup        右:James Gosling

果然大佬们都是有相似之处的,比如头顶... ... 😀

好了好了,回到C++:

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

因此: C++ 是基于 C 语言而产生的,它既可以进行 C 语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程 序设计 。

到这里已经讲完了C++的诞生,下面看C++的发展史:


3.C++发展史


其实时间再向前推,起初的C++并不是叫做C++的:

1979 年,贝尔实验室的本贾尼等人试图分析 unix 内核的时候,试图将内核模块化,于是 在 C 语言的基础上进 行扩展,增加了类的机制 ,完成了一个可以运行的预处理程序,称之为 C with classes 。


看下C++的历史版本:

a37663a7bb75d68f5f99efd8ab31dd9.jpg

虽然C++在不断发展,但是公司主流使用还是C++98C++11,所以在学习中以这两个标准为大方向即可。


4.C++重要性


下面是 TIOBE 编程语言社区排行

e1db18607d3cf548ece886f631298b79_95eeab334baf4f099977131a9dafd0e9.png

只取前五

有童鞋看到:欸,排名不如Java阿,那它是不是不如Java呢?

这样想未免有些太简单,首先这个排名主要是以热度排的,热度高和重要性没有直接关系吧?

再者,排名并不能说明那个语言好,那个语言不好,每个语言都有自己最适合的应用场景

况且在30多年的发展中,C/C++几乎一直稳居前5,还是很dio的。

那C++的应用场景有哪些呢?

那就多了去了,

先说你感兴趣的游戏吧:

游戏开发领域:

PC平台上的游戏:诸如传奇,CS,魔兽世界等;

包括游戏引擎:虚幻4,DirectX等;

三维游戏的计算量非常庞大,想要保证画面精美的同时又要保持流畅,C++无疑是最好的选择。

操作系统以及大型系统软件开发领域:

所有的操作系统几乎都是C/C++写的,如 Unix,Linux,Windows等;

许多大型软件也是C++写的,如 Photoshop,Office 等;

原因嘛,性能高,可直接操控硬件。

嵌入式和物联网领域:

嵌入式嘛,大家首先想到的就是 板子 (单片机) 吧,除此之外还包括系统层面,驱动层面等开发;

具体说嵌入式,就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响等。

包括不久前提出的万物互联,这是一种新兴的趋势,未来可期。

人工智能领域:

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

以上就是我提到的部分应用领域,其实C/C++的应用领域有很多,大家可以自行发现。


Part2:如何学习C++


1.看看别人怎么学


以下引用自《程序员》刊登的拙文《C++强大背后》最后一段:

C++ 缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习 C 语言只需一本 K&R  C 程序设计语言》即可,但C++ 书籍却是多不胜数。我是从 C 进入 C++ ,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次: 

• 第一个层次, C++ 基础 ( 平平常常 )

挑选一本入门书籍,如 《 C++ Primer 》、《 C++ 大学教程》 或 Stroustrup 撰写的经典 《 C++ 程序设计语 言》 或他一年半前的新作 《 C++ 程序设计原理与实践》 ,而一般 C++ 课程也止于此,另外 《 C++ 标准程 序库》《 The C++ Standard Library Extensions 》 可供参考 ;

• 第二个层次,正确高效的使用C++ ( 驾轻就熟 )

此层次开始必须自修,阅读过 《 (More)Effffective C++ 》、《(More)Exceptional C++ 》《 Effffective STL 》《 C++ 编程规范》 等,才适宜踏入专业 C++ 开发之路 ;

第三个层次,深入解读C++ ( 出神入化 )

关于全局问题可读 《深入探索 C++ 对象模型》、《 Imperfect C++ 》、《 C++ 沉思录》、《 STL 源码剖 析》 ,要挑战智商,可看关于模版及模版元编程的书籍如 《 C++Templates 》、《 C++ 设计新思维》 、 《 C++ 模版元编程》 ;

第四个层次,研究C++ ( 返璞归真 )

阅读 《 C++ 语言的设计和演化》、《编程的本质》 ( 含 STL 设计背后的数学根基 ) 、 C++ 标准文件 《 ISO/IEC 14882:2003 》 C++ 标准委员会的提案书和报告书 、关于 C++ 的学术文献。由于我主要是应用C++ ,大约只停留于第二、三个层次。然而, C++ 只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。建议读者不要强求几年内 “ 彻底学会 C++ 的知识 ” ,到达第二层左右便从工作实战中 汲取经验,有兴趣才慢慢继续学习更高层次的知识 。虽然学习 C++ 有难度,但也是相当有趣且有满足感的。

可见,C++是不能速成的,如《21天精通C++》这样的书完全是天方夜谭;

所以,C++的学习要靠扎实的基础学习,实战,读书,沉淀等;


2.自己怎么学


最终还是要回到自己身上,自己如何学习C++呢?

其实在我之前的一期 【带你入门】 从0开始学习C语言 篇末提到了一些学习方法,这些学习方法用在C++上也是适用的;

只不过,C++的学习过程中最好是买几本书来看:

如:

807e8e6177977b818006efa7ecfbfcfb_691cccc1e9c4445381781a4ca61c3cd8.png

《Effective C++》 这个可以多读几遍

1d63788e0e17732fa6530b3b08f33d01_aec13a7ec66a4a1fb028f06ee448a417.png

《C++ Primer》  主要起查阅作用

4f5a088066dbedf62b4362008ee11fb2_1f2928dc7141468ea2346df3c388a777.png

《STL 源码剖析》   STL是C++库的一种

讲到这里基本上就完结了,不知道你对C++的热情是否高涨了许多呢?


总结:

这篇博客没有硬知识,主要是对开始学习C++进行一个引导,方向的确定等,我毕竟还是个小小的学生,观点难免会有不成熟的地方,欢迎讨论~

目录
相关文章
|
5天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
24 4
2023/11/10学习记录-C/C++对称分组加密DES
|
4月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
90 0
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
2月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
27 1
|
5月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
5月前
|
人工智能 分布式计算 Java
【C++入门 一 】学习C++背景、开启C++奇妙之旅
【C++入门 一 】学习C++背景、开启C++奇妙之旅
|
5月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
|
5月前
|
存储 C++ 索引
|
5月前
|
存储 C++ 容器