在C的基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。
- C是C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。
C++名字的由来
- C++这个名字是Rick Mascitti于1983年中所建议的,并于1983年12月首次使用。更早以前,尚在研究阶段的发展中语言曾被称为“new C”,之后是“C with Classes”。在计算机科学中,C++仍被称为C语言的上层结构。它最后得名于C语言中的“++”运算符(其对变量的值进行递增)。而且在共同的命名约定中,使用“+”以表示增强的程序。斯特劳斯特鲁普说:“这个名字象征着源自于C语言变化的自然演进”。
C++标准
- 由ISO/IEC JTC1/SC22/WG21进行。已经出版的标准文档如下:
发布时间 | 文档 | 通称 | 备注 |
---|---|---|---|
2017 | ISO/IEC 14882:2017 | C++17 | 第五个C++标准 |
2017 | ISO/IEC TS 22277:2017 | coroutines TS | 协程库扩展 |
2017 | ISO/IEC TS 21425:2017 | ranges TS | 提供范围机制 |
2017 | ISO/IEC TS 19568:2017 | library fundamentals TS | 标准库扩展 |
2016 | ISO/IEC TS 19571:2016 | concurrency TS | 用于并发计算的扩展 |
2015 | ISO/IEC TS 19217:2015 | concepts TS | 概念库,用于优化编译期信息 |
2015 | ISO/IEC TS 19841:2015 | TM TS | 事务性内存操作 |
2015 | ISO/IEC TS 19570:2015 | parallelism TS | 用于并行计算的扩展 |
2015 | ISO/IEC TS 18822:2015 | filesystem TS | 文件系统 |
2014 | ISO/IEC 14882:2014 | C++14 | 第四个C++标准 |
2011 | ISO/IEC TR 24733:2011 | - | 十进制浮点数扩展 |
2011 | ISO/IEC 14882:2011 | C++11 | 数学函数扩展 |
2010 | ISO/IEC TR 29124:2010 | - | 数学函数扩展 |
2007 | ISO/IEC TR 19768:2007 | C++TR1 | C++技术报告:库扩展 |
2006 | ISO/IEC TR 18015:2006 | - | C++性能技术报告 |
2003 | ISO/IEC 14882:2003 | C++03 | 第二个C++标准 |
1998 | ISO/IEC 14882:1998 | C++98 | 第一个C++标准 |
编程开发编辑
集成开发环境(IDE)
- Visual Studio (Visual C++)
- C++ Builder
- kDevelop
- Anjuta
- Code::Blocks:开放源码的全功能的跨平台C/C++集成开发环境 [7] 。
- Visual Mingw
- Ideone
- Eclipse CDT
- Compilr
- Code Lite
- Netbeans C++
编译器
- Dev C++
- Ultimate++
- Digital Mars
- C-Free
- MinGW
- Tiny C Compiler
C++中的特色
- 和C语言相比,C++引入了更多的特性,包括:复合类型(引用类型等)、const限定符和constexpr常量表达式、类型处理运算符(类型别名及auto和decltype等多种类型指示符)、C++标准库(IO库与多种容器类)与迭代器、动态内存与智能指针、函数重载、面向对象程序设计(如数据抽象、成员函数、类作用域、构造函数与析构函数、静态成员、访问控制与继承、虚函数、抽象类与接口等)、拷贝控制、运算符重载、造型与函数风格的强制类型转换、模板与泛型编程,以及异常处理、名字空间、多继承与虚继承、运行时类型识别及嵌套类等。
- 和普遍认为的相反,C++不是第一个正式引入const关键字的语言。80年代早期,Bjarne Stroustrup和Dennis Retchie讨论之后提供了在C语言中readonly/writeonly的实现机制,并在带类的C中获取了一定经验。关键字const正式引入C语言是在ANSI C89。这早于第一个C++国际标准近十年,但此时const已被C++实现普遍采用。
- C++在某些案例中(见下“与C不兼容之处”),进行比C还要多的类型检查。
- 以“//”起始作为注解起源自C的前身BCPL,而后被重新引入到C++。
与C不兼容之处
- C++有时被认为是C的超集(superset),但这并不严谨。各个版本的ISO/IEC 14882的附录C中都指出了C++和ISO C的一些不兼容之处。
- 大部分的C代码可以很轻易的在C++中正确编译,但仍有少数差异,导致某些有效的C代码在C++中失效,或者在C++中有不同的行为。
- 最常见的差异之一是,C允许从void*隐式转换到其它的指标类型,但C++不允许。下列是有效的C代码:
但要使其在C和C++两者皆能运作,就需要使用显式转换:// 从void *隐式转换为int * int *i = malloc(sizeof(int) * 5);
int *i = (int *)malloc(sizeof(int) * 5);
另一个常见的可移植问题是,C++定义了很多的新关键字,如new和class,它们在C程序中,是可以作为识别字(例:变量名)的。
C++的Hello World程序
-
下面这个程序显示“Hello, world!”然后结束运行:
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; }
这里也可以使用using指令以避免再次声明std::——
#include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; }
你可以用“\n”代替以上代码里的“endl”,不过必须用在句子的后端。请不要把斜杠(/)和反斜杠(\)混淆。
std::cout << "Hello, world!\n";
但需要知道的是, std::endl 不仅仅会在某个输出流中插入换行字符,还将执行输出流的 flush() 函数(即刷新缓冲区),而’\n’则不会。
应用
书籍
- C++ Primer 第5版
知识点
基本语法
-
C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。
- 对象 :对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例
- 类 :类可以定义为描述对象行为/状态的模板/蓝图。
- 方法 : 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
- 即时变量 :每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
基本类型
类型转换
转义序列
- ‘\a’ 响铃
- ‘\n’ 换行符
- ‘\r’ 回车符
- ‘\t’ 水平制表符(Tab键)
- ‘\b’ 退格符(BackSpace键)
- ‘\’ 反斜线
- “’” 单引号
- ‘"’ 双引号
- ‘\0’ 空字符
字符串
数组
-
一维数组
-
多维数组
-
基于数组的列表
- 列表就是同构元素组成的一个集合,元素之间存在一种线性关系(线性即指在逻辑级别,列表中除第一个元素之外的每个元素都有唯一的前导元素,出最后一个元素之外的每个元素都有唯一的后继元素
语句
典型的判断结构的一般形式:
语句 | 描述 |
---|---|
if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if…else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
嵌套 if 语句 | 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
嵌套 switch 语句 | 您可以在一个 switch 语句内使用另一个 switch 语句。 |
循环
-
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
-
循环类型
循环类型 | 描述 |
---|---|
while 循环 | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 |
for 循环 | 多次执行一个语句序列,简化管理循环变量的代码。 |
do…while | 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。 |
嵌套循环 | 您可以在 while、for 或 do…while 循环内使用一个或多个循环。 |
控制语句 | 描述 |
---|---|
break 语句 | 终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。 |
continue 语句 | 引起循环跳过主体的剩余部分,立即重新开始测试条件。 |
goto 语句 | 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。 |