在我们的数据结构与算法分析课程中, 老师主要使用了 C++ 编程, 而大一只学习了 C 语言的课程, 因此通过本篇 blog , 简要讲述 CC++ 的亿些区别.

首先, 从原则上说, C++C 的超集, 因此 C++ 可以基本兼容 C 语言, 所以绝大部分的 C 语法都可以在 C++ 中使用.

输入输出

最直观的区别可能就是在 C++ 的输入输出一开始很容易看得人一头雾水.

我们在C语言使用的头文件是 stdio.h, 如果你依然想要使用 printf() 等函数, 在 C++ 中, 你可以 #include <cstdio> 来代替.

但是, C++ 最常用的输入输出库则是 iostream, 其中 cin 用于输入, cout 用于输出.

关于这个库

乍一看, 似乎这个库的名称就很难懂, 其实要把它分开来看:

  • io 代表的是 I/O, 即 Input/Ouput, 输入和输出;
  • stream 则是流这个单词, 流是数据在内存和设备之间传输的抽象概念, 你可以看微软的文档;
  • 所以说这个库的名称就是 “输入输出流”.

输入输出的用法

在C++代码中很常见的 cin >> x 语句, 看起来就非常难以理解.

其实, 如果你把 cin 理解成 “输入流”, 那么 >> 就可以理解为 “从输入流中读取数据”, 即 cin >> x 就是从输入流中读取一个数据, 并将其赋值给变量 x.
其中, c 就代表了 character (字符), in 就是 input, 也就是从字符读入数据.
其中, >> 被称为 Extraction Operator(提取运算符), 它表示从输入流中读取数据.
对应的, << 被称为 Insertion Operator(插入运算符), 它表示将数据写入输出流.

在这里, 其实如果上C语言课有印象的话, 你可能会记得 >><< 其实是两个位运算符, 它们分别表示右移和左移.
所以, 这里其实涉及到 C++ 的一个特点, 那就是面向对象, 从而引出的运算符重载. 这个在后文谈到.

面向对象

C++ 是一门面向对象的语言, 因此它支持面向对象的各种特性, 比如类, 继承, 多态等.
C 语言则是一门面向过程的语言, 它不支持类, 因此 C++ 中的类实际上是对 C 语言中的结构体(struct)的封装.

什么是类呢? 类(Class) 就是对事物的分类, 比如人类, 鸟类, 鱼类等等. 类可以包含数据(属性) 和 行为(方法).

而对象(Object) 则是类的实例, 比如小明, 小红, 小军等等.
对象可以访问类中的数据和方法.

C++ 中, 类的定义使用关键字 class 声明.

运算符重载

正因如此, 自定义的类需要实现一些运算, 就需要通过运算符重载来完成, 就是说去定义一些运算符的函数.

所以上述的 >><< 就是运算符重载的例子. 其本质还是位运算符. 只是由于 cin 这些对象不需要位运算, 所以我们覆盖了这些运算符的功能, 重新实现了这种输入输出的功能.