对C++中cin和cout的一些解释
在我们的数据结构与算法分析课程中, 老师主要使用了 C++ 编程, 而大一只学习了 C 语言的课程, 因此通过本篇 blog , 简要讲述 C 与 C++ 的亿些区别.
首先, 从原则上说, 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 这些对象不需要位运算, 所以我们覆盖了这些运算符的功能, 重新实现了这种输入输出的功能.