对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
这些对象不需要位运算, 所以我们覆盖了这些运算符的功能, 重新实现了这种输入输出的功能.