• 9、流类库与输入/输出


    就像C语言一样,c++语言中也没有输入/输出语句。但c++编译系统带有一个面向对象的输入/输出软件包,它就是I/O流类库。

    1、I/O流的概念及流类库结构

    I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。

    当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。

    流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。由于流对象是程序中的对象与文件对象进行交换的界面,对程序对象而言,文件对象有的特性,流对象也有,所以程序将流对象看作是文件对象的化身。

    与输入输出设备交互也是通过I/O流类来实现的。流所涉及的范围远不止于此,凡是数据从一个地方传输到另一个地方的操作都是流的操作。像网络数据交换、进程数据交换等都是流操作。因此,一般意义下的读操作在流数据抽象中被称为从流中提取,写操作被称为向流中插入。

    I/O流类库的基础是类模板,类模板提供了库中的大多数功能,而且可以作用于不同类型的元素,这些类模板都以"basic_"为前缀。

    I/O流类库中有两组类模板实例:面向宽字符的和面向窄字符的。面向宽字符的类支持多字节的字符,面向窄字符的类支持单字节字符。头文件<iosfwd>中,有很多实例化类型。

    在I/O流类库中,头文件<iostream>声明了8个预定义的流对象用来完成在标准设备上的输入/输出操作:cin、cout、cerr、clog、wcin、wcout、wcerr、wclog。

    2、输出流

    一个输出流对象是信息流动的目标,最重要的三个输出流是ostream,ofstream和ostringstream。

    预先定义的ostream类对戏那个用来完成向标准设备的输出,包括:

    cout标准输出

    cerr标准错误输出,没有缓冲,发送给他的内容立即被输出

    clog类似于cerr,但是有缓冲,缓冲区满时被输出。

    ofstream类支持磁盘文件输出。如果你需要一个只输出的磁盘文件,可以构造一个ofstream类的对象。在打开文件之前或之后可以指定ofstream对象接受二进制或文本模式数据。很多格式化选项和成员函数可以应用于ofstream,包括基类ios和ostream的所有功能。

    如果在构造函数中指定一个文件名,当构造这个文件时该文件是自动打开的。否则,可以在调用默认构造函数之后使用open成员函数打开文件,或者在一个由文件指示符标识的打开文件基础上构造一个ofstream对象。

    2.1构造输出流对象

    之前都是将信息输出到标准输出设备,使用的是cout。如果要使用文件流将信息输出到文件,便需要使用构造函数来建立流对象。

    构造输出文件流的常用方法如下:

    使用默认构造函数,然后调用open成员函数,例如:

    ofstream myFile;//声明一个静态输出文件流对象

    myFile.open("filename",iosmode);//打开文件,使流对象与文件建立联系

    或:
    ofstream * pmyFile=new ofstream;//建立一个动态的输出文件流对戏那个

    pmyFile->open("filename",iosmode);//打开文件,使流对象与文件建立联系

     在调用构造函数时指定文件名和模式:

    ofstream myFile("filename",iosmode);

    也可以使用同一个流先后打开不同的文件(在同一时刻只有一个是 打开的):

    ofstream ofile;

    ofile.open("FILE1",iosmode);//打开文件FILE1

    //....向文件“FILE1”输出

    ofile.close();//关闭FILE1

    ofile.open("FILE2",iosmode);//打开文件FILE2

    //....向文件“FILE2”输出

    ofile.close();//关闭FILE2

    //当对象ofile离开它的作用域时便消亡

    2.2使用插入运算符和操纵符

    介绍如何控制输出格式以及如何为自己的类建立插入运算符。插入(<<)运算符是所有标准c++数据类型预先设计的,用于传送字节到一个输出流对象。插入运算符与预先定义的操纵符一起工作,可以控制输出格式。

    很多操纵符都定义在ios_base类中和<iomanip>头文件中。

    1、输出宽度

    可以通过在流中放入setw操纵符或调用width成员函数为每个项指定输出宽度。

  • 相关阅读:
    20165231 2017-2018-2 《Java程序设计》第5周学习总结
    结对学习感想及创意照
    20165231 第四周测试课下补做
    20165231 2017-2018-2 《Java程序设计》第4周学习总结
    20165231 2017-2018-2 《Java程序设计》第3周学习总结
    20165309 第七周学习总结
    20165309 实验一 Java开发环境的熟悉
    20165309 第四周测验总结
    20165309 第四周学习总结
    20165317第七周学习内容
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6328386.html
Copyright © 2020-2023  润新知