C++从入门到入土
🍔前言:
我们学习了C语言,有了C语言的底子就更容易学习C++,今天让我们认识一下C++,并了解分析一下C++。
目录
什么是C++
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的
程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机
界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言
应运而生。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一
种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而
产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的
程序设计,还可以进行面向对象的程序设计。
为什么会出现C++
C++的出现可以追溯到20世纪80年代,它的诞生是为了满足一些编程语言的需求和解决一些问题。以下是一些导致C++出现的主要原因:
扩展性:C语言在系统编程和应用程序开发中非常成功,但它在面向对象编程(OOP)方面存在一些不足。C++的创建是为了将OOP的特性引入C语言,从而更好地处理大型和复杂的项目。这种扩展性使得C++能够同时支持传统的过程性编程和OOP,使其更灵活。
2.继承和代码重用:C++引入了类和对象的概念,允许开发者创建具有继承和多态性质的数据结构,这有助于提高代码的可重用性和可维护性。这对于大型项目非常有用。
3.类型安全性:C++引入了类型安全性的特性,减少了一些C语言中常见的错误,如指针溢出和内存泄漏。这有助于提高代码的质量和可靠性。
4.标准库:C++的标准库(STL)提供了丰富的数据结构和算法,减少了开发者需要从头编写的工作量。这加速了开发过程,并提高了代码的质量。
5.性能:C++被设计为一种高性能语言,它提供了直接的内存访问和更多的底层控制,这使得它适用于系统编程和嵌入式开发等需要高性能的领域。
6.可移植性:C++可以在不同的平台上编写可移植的代码,这使得跨平台开发变得更加容易。
7.社区和生态系统:C++拥有广泛的开发社区和丰富的资源,这使得开发者可以轻松获得支持、工具和框架。
总的来说,C++的出现是为了在保留C语言的功能和性能的基础上,提供更多的抽象和工具,以满足不断增长的软件开发需求。它成为了一种非常强大和多用途的编程语言,广泛用于游戏开发、系统编程、嵌入式系统、科学计算等众多领域。它继承了C语言的传统,同时引入了新的编程范例和工具,使得软件开发更加高效和可维护。
C++的发展史
1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C
语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with
classes。
语言的发展就像是练功打怪升级一样,也是逐步递进,由浅入深的过程。我们先来看下C++的历
史版本。
阶段 | 内容 |
C with classes | 类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符 重载等 |
C++1.0 | 添加虚函数概念,函数和运算符重载,引用、常量等 |
C++2.0 | 更加完善支持面向对象,新增保护成员、多重继承、对象的初始化、抽象类、静 态成员以及const成员函数 |
C++3.0 | 进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构的处 理 |
C++98 | C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美 国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库) |
C++03 | C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性 |
C++05 | C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名 C++0x,即:计划在本世纪第一个10年的某个时间发布 |
C++11 | 增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循 环、auto关键字、新容器、列表初始化、标准线程库等 |
C++14 | 对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表 达式,auto的返回值类型推导,二进制字面常量等 |
C++17 | 在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文 本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等 |
C++20 | 自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协 程(Coroutines)、范围(Ranges)、概念(Constraints)等重大特性,还有对已有 特性的更新:比如Lambda支持模板、范围for支持初始化等 |
C++23 | 制定ing |
C++还在不断的向后发展。但是:现在公司主流使用还是C++98和C++11,所有大家不用追求最
新,重点将C++98和C++11掌握好,等工作后,随着对C++理解不断加深,有时间可以去琢磨下更
新的特性。
C++与C语言的区别
C++和C语言是两种不同的编程语言,它们有许多相似之处,但也存在一些显著的区别。以下是它们的主要区别:
面向对象编程:
- C++是一种面向对象编程(OOP)语言,它支持类和对象的概念,允许开发者使用封装、继承和多态等OOP特性。
- C语言是一种过程性编程语言,没有直接支持类和对象。它主要侧重于过程和函数的编写。
类型安全性:
- C++对类型安全性有更强的支持,它引入了强类型检查和类型安全的特性,减少了一些常见的错误,如指针操作中的缓冲区溢出。
- C语言在这方面相对较弱,允许更多的灵活性,但也容易导致类型错误和安全漏洞。
标准库:
- C++标准库(STL)提供了丰富的数据结构和算法,如向量、链表、映射、排序等,使开发更方便。
- C语言的标准库相对较小,提供了一些基本的函数和数据结构,但不如C++的标准库丰富。
扩展性:
- C++允许使用C语言的代码,因此可以逐步将C代码转换为C++。
- C语言不支持C++的一些特性,因此将C++代码转换为C可能需要进行较大的改动。
新特性:
- C++经常引入新的语言特性和标准,以增加语言的功能和性能,例如模板、异常处理、智能指针等。
- C语言的标准相对稳定,不经常引入新的特性。
复杂性:
- C++通常被认为比C语言更复杂,因为它引入了更多的概念和语法规则,需要更多的学习和理解。
- C语言相对较简单,更适合一些需要更底层控制的场景。
生态系统:
- C++拥有庞大的开发社区和丰富的资源,适用于许多应用领域,包括游戏开发、系统编程、嵌入式系统等。
- C语言也有强大的生态系统,但在某些领域,如现代应用程序开发,已经被C++和其他语言所取代。
总的来说,C++是C语言的扩展,具有更多的功能和抽象,更适合复杂的应用程序开发,而C语言更适合较低级别的系统编程和一些资源受限的环境。选择哪种语言取决于项目的需求和开发者的偏好。
C++的优势
C++是一种多用途的编程语言,具有多个优点,使其在许多领域广泛应用。以下是C++的一些主要优点:
高性能: C++是一种编译型语言,允许进行底层的内存管理,这使得它在性能上优越。C++代码通常比解释型语言(如Python)执行更快,适合处理大规模数据和高计算需求的应用。
多范式编程: C++支持多范式编程,包括面向对象、面向过程和泛型编程。这使得它非常灵活,能够适应不同的编程风格和需求。
底层控制: C++允许直接访问内存和硬件,这对于系统编程和嵌入式开发非常重要。开发者可以精确控制程序的行为,这对于需要高度优化的应用程序非常有利。
丰富的标准库: C++具有强大的标准模板库(STL),包括各种容器、算法和数据结构。这些库提供了许多常用工具,可以加速开发并提高代码的可维护性。
跨平台性: C++可以用于多个操作系统,包括Windows、Linux和macOS。这使得它成为跨平台开发的理想选择。
广泛的应用领域: C++在游戏开发、嵌入式系统、高性能计算、金融领域、图形学等各个领域都有广泛的应用。它是一种通用性强、适用性广泛的语言。
社区和资源: C++有庞大的开发者社区,提供了大量的学习资源、开源库和工具。这使得学习和使用C++更加容易。
强大的工具生态系统: C++有丰富的集成开发环境(IDE)和调试工具,如Visual Studio、CLion、GCC、Clang等,使开发过程更加高效。
可扩展性: C++支持模板元编程,这使得开发者可以编写高度可扩展的代码,适应不断变化的需求。
历史悠久: C++已经存在多年,经过了广泛的演化和改进。它的稳定性和可靠性得到了验证。
C++的重要性
语言的使用广泛度
下面图片是最新2023年最受欢迎编程语言榜单:
在30多年的发展中,C/C++几乎一致稳居前5。
TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互
联网上有经验的程序员、 课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如 Google、
MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)进行计算。
注意:排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景,但是C++一直很受欢迎。
在工作领域
C++在各种工作领域中都有广泛的应用。它是一种多用途的编程语言,因为它具有高性能、灵活性和丰富的功能,适用于各种应用程序。以下是C++在不同工作领域中的一些主要应用:
游戏开发:
- C++是游戏开发的首选语言之一。许多游戏引擎,如Unity3D和Unreal Engine,都是用C++编写的。
- C++的高性能和底层控制使其适用于实时图形和物理仿真等游戏关键组件的开发。
系统编程:
- 操作系统、驱动程序和操作系统工具通常使用C++进行开发。这是因为C++具有直接的内存访问和底层硬件控制的能力。
- C++也用于开发网络协议、文件系统和其他系统级应用。
嵌入式系统:
嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程师、固件开发工程师等。
知名的一些厂商,比如:以华为、vivo、oppo、小米为代表的手机厂;以紫光展锐、乐鑫为代表的芯片厂;以大疆、海康威视、大华、CVTE等具有自己终端业务厂商;以及海尔、海信、格力等传统家电行业。
随着5G的普及,物联网(即万物互联,)也成为了一种新兴势力,比如:阿里lot、腾讯lot、京东、百度、美团等都有硬件相关的事业部科学计算和数学建模:
- C++用于高性能科学计算和数学建模,例如在物理学、工程学和计算机科学中的数值模拟和数据分析。
- C++库如Eigen和Boost提供了强大的数学和线性代数工具。
金融领域:
- 金融领域的高频交易和风险分析通常使用C++编写,因为它能够处理大量的数据和快速执行复杂的算法。
- 开源库如QuantLib用于金融建模和分析。
图形和计算机图形学:
- C++广泛应用于计算机图形学,包括视频游戏、动画和计算机辅助设计。
- 图形库和API,如OpenGL和DirectX,通常使用C++编写。
数据库系统:
- 许多关系数据库管理系统(RDBMS)的内部实现和驱动程序使用C++编写。例如,MySQL和PostgreSQL都有C++组件。
- C++库如STXXL用于高性能大规模数据处理。
操作系统工具和开发:
- 开发操作系统和系统工具需要直接访问硬件和系统资源,因此C++是一个常见的选择,用于编写诸如编译器、调试器和操作系统核心组件的工具。
- 人工智能
一提到人工智能,大家首先想到的就是python,认为学习人工智能就要学习python,这个
是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据就
可以开始训练模型了。但人工智能背后深度学习算法等核心还是用C++写的。
总之,C++是一种非常强大和多用途的编程语言,适用于各种领域,特别是需要高性能、底层控制和复杂算法的应用。它在许多行业中都有着广泛的应用,因此学会C++编程技能可以为从事这些领域的开发者提供很多机会。
除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。
如何学习C++
学习C语言需要多多练习,学习数据结构需要多多思考,那学习C++呢?
别人怎么学?
以下引用自2010年8月号《程序员》刊登的拙文《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)Effective C++》、《(More)Exceptional C++》、
《Effective 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++有难度,但也是相当有趣且有满足感的。
如果题主认为的「精通」是指上述所指的第二层次,那么我估计一年全职时间也未足够「精
通」。首先,阅读这些书籍本身也需要不少时间,而且对于一般人来说(指除了一些学习记忆能
力超强的人),很可能需要阅读几遍才能记住一些细节。另外,阅读后必须要练习。除了入门的
习题外,还需要做一些工程向的项目,才能了解各种语法、编程范式的使用方法及时机,理想地
建议参与一些开源项目。然而,学习是需要不断思考并把结果沉淀,方法包括与朋友讨论、写博
客、写知乎答案等,这些都需要时间。
而网络上有许多21天速成C++的办法与书籍,但是这些都是虚假的不真实的存在。下面是一副调侃“如何21天学完c++”的漫画:
所以没有什么是可以速通的,都需要我们不断地学习、练习、复习进行知识地熟练运用才行。
自己怎么学
虽然C++语法特性繁琐复杂,经典书籍琳琅满目,但是学习方法是属于自己的,我们应该总结出一套属于自己的学习经验,多总结。
1. 写博客
经常写博客不仅可以记录自己学习的历程,知识点的认识,更是复习的一把神兵利器。
2. 中后期画思维导图总结
画思维导图软件比如:xmind、imindmap等,我们要熟练应用。
常看一些经典书籍
- 查阅C++的官方文档以及相关的书籍,如《C++ Primer》、《Effective C++》等。
- 学习语言的规范和最佳实践。
入门阶段,找一本简单、薄一点的书快速入门,《C++程序设计》就挺适合的,可以简
单快速了解C++的语法特性。当C++学习过半之后,大概继承和多态学完,建议看下《Effective C++》,该书以建议
的方式告诉你如何写出更好的C++程序,看和不看差别非常大。
C++系统学完后,有时间可以看下《C++编程思想》对讲过的知识点融会贯通,该
本书有一定深度,从原理方面对C++语法进行介绍。
《C++ Prime》可以当成工具书对待,有不清楚的语法特性可以快速去查,建议工作之
后可以利用闲暇时间慢慢品味下。最后这两本书都有一定难度,如果基础知识掌握不扎实,不建议看,强烈建议好好把基础知
识打扎实。
《STL源码剖析》将六大组件逐一剖析,看完之后对STL的设计框架以及内部实现原理
有更深的认识,面试时可以游刃有余和面试官交锋。
《深度探索C++对象模型》会让你对C++语法设计原理有更深层次的认识,有些疑惑的
知识点看完之后里面就清晰了。
4.多刷题
牛客网
牛客网专项训练https://www.nowcoder.com/intelligentTest
2. leetcode
leetcode中文刷题网站https://leetcode-cn.com/problemset/all/
C++是一个庞大而不断发展的语言,持续学习是保持竞争力的关键。尝试新的C++标准和功能,保持对语言的敏感性。
记住,学习编程是一个渐进的过程,不要急于求成。通过不断的实践和项目经验,你将逐渐熟练掌握C++。
学习C++还道阻且长,所以我们一定要脚踏实地,一步一个脚印打好基础,争取每次学一遍都有收获。
以上就是本次内容,希望可以从本篇文章中喜欢上C++。
来源地址:https://blog.csdn.net/m0_74755811/article/details/133774542
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341