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 应用场景
- 操作系统:C++被广泛用于操作系统的开发,因为其高效性和对硬件的底层控制。
- 游戏:C++是游戏开发领域的主流语言之一,因为它能够提供高性能的图形和物理引擎。
- 嵌入式系统:C++在嵌入式系统开发中也非常常见,因为它可以提供高效的控制和底层硬件访问能力。
- 高性能应用程序:C++常用于开发高性能的应用程序,如图形图像处理软件、科学计算软件和多媒体应用程序等。
- 数据库开发:C++在数据库管理系统的开发中也得到了广泛应用,例如MySQL和Oracle等数据库软件就是用C++编写的。
- 网络编程:C++也被用于网络编程中,例如开发服务器端应用程序和网络协议等。
- 数学和科学计算:C++在数学和科学计算领域也有着广泛的应用,因为其支持高精度计算和复杂的数学运算。例如,MATLAB和Mathematica等数学软件就是用C++编写的。
- 人工智能和机器学习:C++也可以用于人工智能和机器学习领域,因为它可以提供高效的计算能力和优化算法。
- 金融领域:C++也被广泛应用于金融领域中,例如高频交易、金融建模和风险分析等。