【C++】输入输出流 ① ( C++ 输入输出流 I/O 流概念 | 输入 和 输出 类型 | 输入 和 输出 流继承结构 | 输入 和 输出 流相关头文件 | iostream 头文件简介 )






一、C++ 输入输出流 I/O 流概念




1、输入 和 输出 概念


输入 和 输出 概念 :

  • 应用程序 的 输入 : 指的是 从 外部输入 将数据 传输给 应用程序 ;
  • 应用程序 的 输出 : 指的是 从 应用程序 将 数据 传输给 外部输出 ;

2、输入 和 输出 类型


上述 输入输出 根据 目的地 的不同 分为 三种类型:

  • 输入和输出 的 目标 是 系统指定的标准设备 : 标准输入输出 , 又称为 标准I/O ; 如 : 键盘 , 显示器 ;
    • istream : 通用输入流 ; 导入 <iostream> 头文件 ;
    • ostream : 通用输出流 ; 导入 <iostream> 头文件 ;
    • iostream : 通用输入 / 输出流 ; 导入 <iostream> 头文件 ;
  • 输入和输出 的 目标 是 磁盘文件 : 文件输入输出 , 又称为 文件 I/O ; 输入就是从磁盘文件读取数据 , 输出就是 写出数据到 磁盘文件 ;
    • ifstream : 文件输入流 ; 导入 <fstream> 头文件 ;
    • ofstream : 文件输出流 ; 导入 <fstream> 头文件 ;
    • fstream : 文件输入 / 输出流 ; 导入 <fstream> 头文件 ;
  • 输入和输出 的 目标 是 内存空间 : 字符串输入输出 , 又称为 串I/O ; 将 字符数组作为 存储空间 , 输入 就是从 字符数组 中读取数据 , 输出就是 写出数据到 字符数组 ;
    • istrstream : 字符串输入流 ; 导入 <strstream > 头文件 ;
    • ostrstream : 字符串输出流 ; 导入 <strstream > 头文件 ;
    • strstream : 字符串输入 / 输出流 ; 导入 <strstream > 头文件 ;

3、输入 和 输出 流继承结构


输入 / 输出 流 的继承结构 ;

下图中 ios 是 输入 / 输出 流 基类 , 含义是 input - output - stream ;

ios 基类 有 2 个子类 , 分别是 istream 输入流 , ostream 输出流 ;

  • 文件输入流 ifstream 继承 istream 类 ;
  • 文件输出流 ofstream 继承 ostream 类 ;
  • 通用输入 / 输出流 iostream 同时继承 istream 和 ostream 类 ;
  • 文件输入 / 输出流 fstream 继承 iostream 类 , 间接同时继承 istream 和 ostream 类 ;

在这里插入图片描述


4、输入 和 输出 流相关头文件


输入 / 输出 流相关头文件简介 :

  • iostream 头文件中定义了对 输入 / 输出 流 操作的基本信息 , 其中定义了 ios,istream,ostream,iostream,istream _withassign, ostream_withassign,iostream_withassign 等类 ;
  • fstream 头文件中定义了 用户管理 的 文件 I/O 操作 ;
  • strstream 头文件中定义了 字符串流 I/O 操作 ;
  • stdiostream 头文件中定义了 混合使用 C 语言 和 C++ 语言 的 I/O 机制 , 使用场景 : C 语言 在 C++ 环境中使用 ;
  • iomanip 头文件中定义了 格式化 I/O 操作 ;

5、iostream 头文件中的 输入 / 输出 流


在 iostream 头文件中 , 提前预定义好了 cin , cout , cerr , clog 等 输入 / 输出 流 ;

  • cin : 标准输入流 , 由 键盘 输入 , 对应 C 语言中的 stdin ;
  • cout : 标准输出流 , 由 屏幕 输出 , 对应 C 语言中的 stdout ;
  • cerr : 标准错误流 , 由 屏幕 输出 , 对应 C 语言中的 stderr ;
  • clog : 标准错误流 , 由 屏幕 输出 , 对应 C 语言中的 stderr ;

导入了 iostream 头文件 , 就可以使用上述 4 个 输入 / 输出 流 ;

__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT istream cin;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream cout;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream cerr;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream clog;

上述 输入 / 输出 流 的 istream 和 ostream 的类型如下 :

using istream       = basic_istream<char, char_traits<char>>;
using ostream       = basic_ostream<char, char_traits<char>>;
  • istream 的 类型 basic_istream 的原型如下 : 这是一个类模板 , basic_istream 类虚继承 basic_ios 类 ;
// CLASS TEMPLATE basic_istream
template <class _Elem, class _Traits>
class basic_istream : virtual public basic_ios<_Elem, _Traits> {
    
     // control extractions from a stream buffer
  • ostream 的 类型 basic_ostream 的原型如下 :
// CLASS TEMPLATE basic_ostream
template <class _Elem, class _Traits>
class basic_ostream : virtual public basic_ios<_Elem, _Traits> {
    
     // control insertions into a stream buffer

basic_ios 的原型如下 , basic_ios 类 也是一个类模板 , 该类 继承 ios_base 类 ;

_STD_BEGIN
// CLASS TEMPLATE basic_ios
template <class _Elem, class _Traits>
class basic_ios : public ios_base {
    
     // base class for basic_istream/basic_ostream

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/134782092