c++ iostream库的一些讨论

c++ iostream库的一些讨论_第1张图片

        大家好,今天慕晓君给大家介绍的是c++中常见的I/O库:iostream,介绍的结构如上图所示,iostream库主要包含两个类型(类),输入流istream和输出流ostream,输入流中主要使用的对象是cin,表示将控制台的键盘输入内容输入到cin后面的变量中,基本语法为cin >> variable;输出流常用的有三个对象,分别是cout、cerr和clog,这三种从本质上将都是将流符号后面的内容输入到控制台,cout为一般控制台输出,cerr为警告和错误信息输出,clog为日志记录的输出,但是为什么同样的东西要出现3次呢?原因很简单,cout为一般输出,主要用于将结果显示给用户,我们知道,在软件设计中,错误和警告信息、以及日志信息是很重要的一块,几乎在每个大型项目中,都需要有专门的错误报告和日志记录,理论上讲cout也可以用于实现cerr和clog的功能,但是,第一,cout主要作为控制台输出,如果要将错误和警告信息以及日志信息输出到文件,那么cout实现的时候就得考虑到输出位置的选择,会很麻烦;第二,三者分开使语句清晰,有利于程序员根据需求“重构”cerr和clog代码。
上述设计体现了程序设计的简单性和实用性。

c++ iostream库的一些讨论_第2张图片

        上图是简单的iostream继承层次,慕晓君和同学讨论时,注意到,和第一幅图不一样,是iostream是继承ostream和istream,而不是ostream和istream继承iostream,这是为什么呢?慕晓君水平不足,想到的是可能因为如果用ostream和istream继承iostream,那stringstream和fstream就需要在istream和ostream中实现两次,不满足程序设计的避免重复原则,后面,慕晓君的同学提出,拿文件流举例,有些文件是只读的,有些文件是只写的,如果只在iostream里实现一个可读写的,那么这样会导致文件的不安全,实际中,对文件的操作需要分成只读、只写和读写皆可的情况,这样实现也具有很强的使用性。

        综上所述,iostream的继承层次具有简单性、安全性和实用性。


你可能感兴趣的:(c++程序设计)