1 概念
- C++是一种面向对象的计算机程序设计语言,作为C语言的继承,C++不仅能进行C语言的过程化程序设计,而且可进行以抽象数据类型为特点的基于对象的程序设计,还能进行基于过程的程序设计。
- C++融合了 3 种不同的编程方式:C 语言代表的过程性语言、C++在 C 语言基础上添加的类代表的面向对象语言、 模板支持的泛型编程。
2 发展史
- 1979年,Bjame Sgoustrup在Bell实验室启动将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。
- 1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流C++编译器都支持这个版本的C++,包括微软的Visual C++和Borland公司的C++Builder。
- 2003年,C++标准委员会总结最新技术并发布了C++03标准。C++03 是给 C++98 打的补丁,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。
- 2011年,C++11发布,该版本引入了对象移动、右值引用、lamba表达式(函数式编程)、编译时类型识别(auto)、别名模板以及很多新型关键词(如nullptr、decltype、constexpr)等现代编程语言常具备的能力,让C++与时俱进,开发效率得到了很大的提升。这些新的特性随着C++11标准的发布而被正式确立下来。C++ 11版本也被称为现代C++,而C++ 98/03版本也被称为传统C++。
- 2014年,C++14发布,相对于C++11来说,这个版本是一个比较小的改动,但是在很大程度上完善了C++11,所以可以说C++14就是在C++11标准上的查漏补缺。
- 2017年,C++17发布,该版本改善了C++的运行时性能和开发速度,并且提供了一些新的特性(如引入了基于STL的并行算法)来更好的处理复杂的多线程应用。
- 2020年,C++20发布,该版本的变革对编写 C++ 程序的方式产生了根本性的影响,其程度不亚于 C++11。特别是以下四个重要特性:Ranges(范围库),Coroutines(协程),Concepts(概念),以及 Modules(模块)。
3 特性
- 封装
C++语言强化了C语言的封装,在类的表示法中定义了属性和行为的访问级别。
C++语言中,用于表示类属性的变量为成员变量;用于表示类行为的函数为成员函数。C++语言中,可以对类的成员变量和成员函数定义访问级别。
public:使用public关键字声明的类的成员变量和成员函数可以在类的内部和外部访问与调用
private:使用private关键字声明的类的成员变量和成员函数只能在类的内部访问和调用
protected:使用protected关键字声明的类的成员变量和成员函数只能在本类以及派生子类的内部访问和调用。
类的成员的作用域只在类的内部,外部不能直接访问。类的成员函数可以直接访问成员变量和调用成员函数。类的外部可以通过类对象访问public成员。
C++语言中,struct定义的类中成员的默认访问权限为public,class定义的类中成员的默认访问权限为private。 - 继承
继承(inheritance)机制是C++程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了C++程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。
在继承体系中基类和派生类都有独立的作用域(一个类就是一个作用域)
子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。(在子类成员函数中,可以使用基类::基类成员显示访问) - 多态
在C++中有两种多态性,一种是静态的多态、一种是动态的多态;
静态的多态:函数重载,看起来调用同一个函数却有不同的行为。静态:原理是编译时实现。
动态的多态:一个父类的引用或指针去调用同一个函数,传递不同的对象,会调用不同的函数。动态:原理是运行时实现。
动态的多态是在不同继承关系的类对象,去调用同一函数,产生不同的行为。在继承中要构成动态的多态还有两个条件:
1、必须通过基类的指针或者引用去调用虚函数
2、被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写
4 标准
发布时间 | 名称 | 文档 | 主要特性 |
---|---|---|---|
1998 | C++98 | ISO/IEC 14882:1998 | 第一个C++标准 |
2003 | C++03 | ISO/IEC 14882:2003 | 第二个C++标准(由于没有改变语言特性,一般用C++98表示C++98/C++03) |
2011 | C++11 | ISO/IEC 14882:2011 | 第三个C++标准(增加了许多新特性,也被称为现代C++) |
2014 | C++14 | ISO/IEC 14882:2014 | 第四个C++标准(作为C++11的一个小扩展,主要提供漏洞修复和小的改进) |
2017 | C++17 | ISO/IEC 14882:2017 | 第五个C++标准(简化语言,提高性能) |
2020 | C++20 | ISO/IEC 14882:2020 | 第六个C++标准(自C++11以来改变最大的发行版) |
5 应用场景
(1)系统级编程
- 操作系统开发:C++ 因其高效性和对底层硬件的直接访问能力,常被用于操作系统内核、设备驱动等关键部分的开发。
- 嵌入式系统:在资源受限的嵌入式系统中,C++ 能够提供必要的性能和灵活性,满足实时性和可靠性的要求。
(2)游戏开发
- 游戏引擎:C++ 因其高效性能,常被用于开发游戏引擎,如 Unreal Engine、CryEngine 等。
- 游戏逻辑:游戏的核心逻辑和算法也常使用 C++ 编写,以实现快速响应和流畅的游戏体验。
(3)桌面应用开发
- 图形用户界面(GUI):C++ 配合 Qt、wxWidgets 等框架,可以开发出跨平台的桌面应用程序。
- 办公软件:如 Adobe 的部分产品和 AutoCAD 等专业软件,都采用了 C++ 作为主要的开发语言。
(4)服务器端开发
- 高性能服务器:C++ 能够处理大量并发请求,因此常被用于开发高性能的 Web 服务器和数据库服务器。
- 网络编程:C++ 在网络编程领域也有广泛应用,如开发网络通信协议、分布式系统等。
(5)科学计算与数据分析
- 数值计算:C++ 在科学计算领域具有重要地位,如物理模拟、数值分析等方面。
- 数据分析:C++ 的高性能和灵活性使其成为数据分析工具的理想选择,如 R 语言和 Python 的部分底层库都是用 C++ 编写的。
(6)金融领域
- 交易系统:金融市场的实时交易系统需要高效且稳定的编程语言,C++ 是其中的佼佼者。
- 风险管理:C++ 也被用于开发复杂的风险管理模型和算法。
(7)人工智能与机器学习
- 深度学习框架:许多深度学习框架如 TensorFlow 的底层实现,以及 Caffe 等,都使用了 C++ 以优化性能。
- 算法实现:C++ 适合实现各种复杂的算法,包括机器学习算法和人工智能模型。
(8)跨平台应用开发
- 跨平台库:C++ 可以与多种跨平台库和框架结合,实现一次编写、多处运行的效果。
- 移动应用开发:尽管不是主流,但 C++ 也可通过如 Qt for Android 等工具用于移动应用开发。
这些只是 C++ 的部分应用场景,实际上 C++ 的应用范围非常广泛,几乎涵盖了所有需要高效、稳定和灵活性的编程领域。