总结:
1.cin
和cout
分别为 C++中为了输入输出方便抽象出的两个类的对象
cin
是istream
的对象cout
是类ostream
的对象
2.endl
本质是函数,当使用endl
时可以看到其起到了 回车换行的作用
。
3.<<
是一种运算符重载,其中重载了字符串、整形、endl
函数指针等基础数据类型
1. C++中的文件和流
开篇对文件和流进行一个简单的介绍。
关于C++中流的介绍:C++ 的 I/O
发生在流中,流是字节序列
C++ 基本的输入输出:cin、cout、cerr、clog使用
C++ 文件和流:
C++ 文件和流(入门)
C++ 文件和流(详细)
前面课程中关于输入输出均使用C语言中的scanf()
和printf()
来代替,而一直没有使用cin&cout
,本篇将会讲cin&cout
的奥秘。
2. cin、cout究竟是什么?
cin
和
cout
分别为
C++中为了输入输出方便抽象出的两个类的对象
cin
是istream
的对象cout
是类ostream
的对象
作为C++语言的入门一般都是从以下代码开始的
#include <iostream>
using namespace std;//可写可不写,标准库的所有函数都在标准的std命名空间中
int main(int argc,char* argv[])
{
cout << "hello world!" << endl;
return 0;
}
刚从C语言过来的我们可能会一脸懵逼,输出不是应该是使用一个函数,此处只是使用一个cout
就可以了呢?
cout
是类ostream
的对象
我们肯定会好奇cout/cin/<<
到底扮演着何种角色?将鼠标箭头放到cout
上,按F12
就会在界面底部出现如图所示
双击上图底部框选的部分,跳转至对如下图所示内容,cout
前为ostream
,根据颜色判断,其可能是一个类
再在ostream
上按F12
,跳转至using ostream = basic_ostream<char, char_traits<char>>;
再往上翻,可以看到basic_ostream
是一个类
因此可以看出cout
是ostream
的一个对象,因此我们可以知道cout
本质不是一个关键字,而是一个对象。
- 对于
cin
进行同样操作,可以得到其为istream
的对象
因此可以知道cin
和cout
分别为 C++中为了输入输出方便抽象出的两个类的对象
3. endl是什么?
endl
本质是函数,当使用
endl
时可以看到其起到了
回车换行的作用
。
#include <iostream>
using namespace std;//可写可不写,标准库的所有函数都在标准的std命名空间中
int main(int argc, char* argv[])
{
cout << "hello world!" << endl<<123;
return 0;
}
运行结果:
在endl
上按F12
可以跳转到以下内容,可以看到endl
是一个函数名,其中包含了"\n"
的回车,.flush()
代表刷新
从上面可以看出本质上endl
是一个函数名
4.<<(左移符号)又是什么?
<<
是一种运算符重载,其中重载了字符串、整形、endl
函数指针等基础数据类型
利用以下代码往上追溯
#include <iostream>
using namespace std;//可写可不写,标准库的所有函数都在标准的std命名空间中
int main(int argc, char* argv[])
{
cout<< endl;
return 0;
}
得到:
上图中可以看到<<
是一种运算符重载,其参数列表中*_Pfn
代表函数指针,可以重载一个函数,<<
几乎把所有的常见的基础数据类型进行了重载,实现了类型不用特别声明即可使用。
这也是为什么不需要指明数据,下面代码均可以实现输出功能
cout<<123;
cout<<"hello";
cout<<123.5f;
5.学习视频地址:cin&cout的奥秘