# 【知识精讲】你好,C++
## Part1
我们已经知道,C 语言因为其具有很多优点,自 20 世纪 70 年代诞生以来,已经得到了广泛的应用,全世界有大量的 C 语言程序员,库代码和开发环境。然而尽管如此,C 语言毕竟是一种面向过程的语言,已经远远不足以满足运用面向对象方法,进行软件开发的需要了。因此,在 1980 年,AT&T 贝尔实验室的 Bjarne Stroustrup 博士便在 C 语言的基础上,发明了 C with Class 语言,最终演变成了现在的 C++ 语言。
C++ 语言的标准化工作从 1989 年开始,经过不断完善,在 1998 年被国际标准化组织(ISO)钦定为国际标准,并随着时间推移而更新——这门课程使用的是 C++ 11 标准。
## Part2
如果我们把计算机科学比喻成武侠小说的世界的话,那么大规模的软件工程活动,就相当于是一整套武学体系——而 C++ 语言,则是这个体系中最为基本的拳脚招数。我们在学习编程语言的时候,经常会遇到这样的争论:究竟学习哪种编程语言更好呢?上文提到的 C++ 之父 Stroustrup 曾经说过这么一句话:世界上只有两种编程语言,一种是被人骂的,另一种是没人用的……显然,C++ 就是前一种语言。
尽管C++ 语言饱受非议,但必须承认,它仍然是计算机科学史上最为重要的语言之一——从它诞生以来,几乎每一个平台,每一个系统,都有大量的由 C++ 编写出的应用程序。凭借着优秀的面向对象特性,优秀的运行效率和良好的可移植性,C++ 语言直到今天仍然有着极其广泛的应用——后续发展的典型的面向对象语言,比如 JAVA 和 C# ,也深受 C++ 影响,在语法上跟 C++ 几乎如出一辙。
![](https://res.jisuanke.com/img/upload/20160712/cd9e719e7aeb946bbc9c529a823a3da27a988c58.png)
图为著名的开源浏览器 FireFox,提供多个平台版本——很多著名的跨平台软件,比如 Google Chrome 和 Microsoft Office,其核心部分都是由 C++ 语言编写的,在不同平台之间可以共享大部分代码。
## Part3
很多同学可能会觉得,听说 C++ 好像很难学的样子,我能学会它吗?事实上,C++ 确实很难——但也很简单。为什么这么说呢?因为 C++ 实际上是一个由多个部分组成的联邦——上文提到的 C++ 之父还曾经说过:“我特别讨厌语言的设计者把自己的喜好强加给用户。”,于是 C++ 就变成了现在的样子——同时包含多个范式,例如面向对象编程,函数式编程,模板,以及继承自纯 C 语言的面向过程编程等。
## Part4
难能可贵的是,这几种看似没什么关联的范式,在 C++ 中混用依然十分的自然——不过想要同时掌握这些范式,自然也就变得极度困难了,所以才会有“ C++ 很难精通”这样的说法。然而,这实际上是一种典型的误解——因为你不需要刻意地去使用C++ 的各种特性,C++ 本身也并不强迫你必须掌握某些特性才能编写你的程序。
事实上,绝大多数人在学习和工作中,都不太可能同时用到以上的所有范式——所以,大家只要放轻松就好了,把C++ 当成一顿各取所需的自助餐,取得你所需要的部分就行了。跟随我们的课程深入学习,大家就会发现,C++ 其实并没有那么可怕……
![](https://res.jisuanke.com/img/upload/20160712/fc683b51756d62bec696260b348c3a4b15a1e9dd.png)
C++ 就像自助餐一样,各取所需即可——你不需要刻意地去使用那些复杂的特性,只要能完成你的工作就行。
## Part5
通过对 C++ 进行学习,你将会在拥有熟练的编程能力的同时,掌握一系列基本的编程思想和方法——万变不离其宗,就算你在以后的工作中,不使用 C++ 而使用其他的语言,你在对 C++ 的学习中所获得的积累,依然可以让你在你的工作中,终身受用。
## Part6
最后,给大家补充一些小八卦:2007 年的时候,Linux 之父 Linus Torvalds 曾经怒斥一名试图向 Git 贡献 C++ 代码的微软程序员,并炮轰 C++ 一无是处——一时间纯 C 派和 C++ 派之间发生了一系列热火朝天的撕逼大战。经常浏览某些程序员社区的同学也都知道,“PXX 是世界上最好的语言”之类的口水话题也经常引发大规模的争吵。
![](https://res.jisuanke.com/img/upload/20160712/cef44b8f297914ff7e40725f19c8e8b52f73b29f.png)
Linus 炮轰 C++原文(英文)
不过,对于各位初学 C++ 的同学来说,参与这种争吵显然是浪费生命的愚蠢行为——再好的语言也一样可以写出烂代码,作为初学者,现在大家需要做的是努力提高自己的编程能力和知识水平——至于具体哪种语言更好,显然不是我们现在应该考虑的问题。
- 教材介绍
- 《编程初学入门常识》
- 什么是程序语言
- 【知识精讲】编程与编程语言
- 【选择测试】编程语言分类
- 【知识精讲】高级语言分类
- 【选择测试】编译与解释
- 【选择测试】程序员笑话-Java
- 熟悉键盘上用于编程的键位
- 【知识精讲】认识你的键盘
- 【知识精讲】中文和英文字符
- 【匹配测试】识别中英文符号
- 【选择测试】中英文符号的影响
- 【伴随编程】不要使用中文引号
- 【伴随编程】不要使用中文分号
- 【伴随编程】正确地输入符号
- 【选择测试】找出程序中的错误
- 初始工程师思维
- 【知识精讲】二进制思想
- 【选择测试】程序员笑话-凑整
- 【知识精讲】闭合的逻辑
- 【选择测试】程序员笑话-条件
- 程序员职业与生活
- 【知识精讲】程序员的发展方向
- 【知识精讲】程序员的装备
- 【知识精讲】程序员的健康
- 【选择测试】做一名健康的程序员
- 《C++程序设计》
- 前言
- 【知识精讲】编程与计算机科学
- 【知识精讲】编程与软件工程
- 【知识精讲】如何学习编程
- 你好C++
- 【知识精讲】你好,C++
- 【知识精讲】C++程序是如何开发的
- 【知识精讲】成为一名Power User
- 【伴随编程】让我们一起说你好
- 【知识精讲】你的第一个C++语言程序
- 【伴随命令】编译、运行你的程序
- 【伴随编程】将变量流式输出
- 【选择测试】变量的作用域
- 【知识精讲】变量与数据类型
- 【匹配测试】C++语言的入门概念
- 【知识精讲】在程序中学会换行
- 【选择测试】正确地换行
- 简单数学运算
- 【知识精讲】重新认识基本运算
- 【选择测试】运算符的理解
- 【伴随编程】做一下简单的运算
- 【伴随编程】a 的 n 次方
- 【知识精讲】数学函数
- 【伴随编程】让C++语言变成计算器
- 【伴随编程】计算球的体积
- 【匹配测试】数学世界知多少
- 【知识精讲】在程序中添加注释
- 【选择测试】正确地写注释
- 从伴随输入到变量地址
- 【伴随编程】 一个数字复读机器
- 【选择测试】理解标准输入输出
- 【伴随编程】一个加法计算器
- 【程序设计】A+B+C问题
- 【伴随编程】简单的I/O格式控制
- 【知识精讲】地址与取地址符
- 【伴随编程】看看我们的地址
- 习题一:面积与周长
- 【程序设计】矩形面积与周长
- 【程序设计】三角形面积与周长
- 【程序设计】圆形面积与周长
- 程序中的是与非
- 【知识精讲】是非的表示与关系运算
- 【伴随编程】验一验关系运算式
- 【选择测试】关系运算式求值
- 【知识精讲】如果的意义
- 【伴随编程】分段函数求值
- 【知识精讲】如果之后的如果
- 【伴随编程】五则运算器
- 【选择测试】分支的嵌套
- 【伴随编程】问号表达式
- 【知识精讲】是非之间的逻辑组合
- 【伴随编程】判断闰年
- 【程序设计】日期合法性
- 【知识精讲】多路顺序结构
- 【知识精讲】在程序中学会缩进
- 【选择测试】正确的缩进
- C++程序中的苦力
- 【知识精讲】使用循环结构
- 【选择测试】对比两种循环
- 【伴随编程】使用while循环
- 【填空测试】理解循环结构
- 【知识精讲】自减和自增运算符
- 【伴随编程】使用自增运算符
- 【知识精讲】for循环
- 【选择测试】for循环的使用
- 【程序设计】一大波好玩儿的程序
- 《代码能力快速提升》
- 《基础数据结构》
- 《搜索入门》
- 《动态规划基础》
- 《数论和基础数学》
- 《图和数基础》