面向对象途径输入输出

面向对象途径输入输出

输入输出概述

  1. 程序运行需要的数据需要从外设(鼠标键盘文件)中获得,运行结果也往往需要输出到外设中(显示器,打印机,文件)。
  2. 输入输出操作并不是语言定义的成分,而是封装在标准库中,例如C中的printf,scanf(需要自己说明对象的类型,比较繁琐,并且容易出错);C++中的cin(istream),cout(ostream)(无需自己说明对象的类型,会自动判断类型包括个数)。
  3. 输入输出是基于字节流的操作,输入时逐个字节流入到计算机内存中,输出时逐个字节从内存流出到外设中。
  4. 无论输入输出,实际上都是带有缓冲区的。
  • 输入时一大块数据先加入缓冲区,然后从缓冲区逐步输入
  • 输出时,数据先放在缓冲区,缓冲区满了再实际输出到外设
  1. 分类:主要有三类
  • 面向控制台(istream,ostream->iostream)
  • 面向文件(ifstream,ofstream->fstream)
  • 面向字符串变量(istrstream,ostrstream->strstream)(现在已经被string类取代)

面向控制台输入输出

  1. 基于函数库的输入输出
    • 输入 getcahr(char *),gets(char *),scanf(“format”,[参数]);//注意此时写类型时要加% %d整形数 %f浮点数 %c字符 %s字符指针
    • 输出 putchar(char *),puts(char *),printf(“format”,[参数]);
    • 特殊的不带缓存的输入输出,getch(),putch();
  2. 基于I/O类库的输入输出
    • cin
    • cout,clog(日志信息),cerr(错误信息)
    • 对输出格式进行操作
    setprecosion(int n)//控制浮点数输出的位数
也可以重载<<或者>>以实现对某一特殊对象的输出

例如

    class A
    {
        int x,y;
        public:
        friend ostream& operator << (ostream& out,const A& a)
    };
    ostream& operator << (ostream& out,const A& a)
    {
        out<<a.x<<','<<a.y;
        return out;
    }
    A a1,a2;
    cout<<a1<<endl<<a2<<endl;

面向文件输入输出

  1. 解决需要永久存储某些数据的需求,一般存储在磁盘、磁带、光盘中,只学习以文件形式存储数据
  2. 文件数据存储数据有两种方式
  • 二进制方式(binary):没有任何显示含义的纯二进制文本,一般用于存储任意结构的数据,数据由其他应用程序来解释
  • 文本方式(text):包含可显示的字符和有限的几个控制字符(\r,\n,\t),一般用来存储具有“行”结构的数据,可以用记事本打开查看
  • 举例来说,1234567在文本方式中以ASCII码形式存储,在二进制文本中以原码形式存储(一个数字占四个字节)
  1. 文件的读写过程
    • 打开文件
    • 文件读写
    • 关闭文件
  2. 文件的输出操作(需要#include以及#include)
    //直接方式
    ofstream out_file(<文件名>,[打开方式]);
    //间接方式
    ofstream out_file;
    out_file.open(<文件名>,[打开方式]);
  • 打开方式:
    • ios::out,打开文件用于写操作,如果外部文件以及存在,那么先清除它的内容,否则,先创建该文件,是默认打开方式
    • ios::app,打开文件用于添加操作,如果外部文件不存在,那么先创建该文件
    • ios::binary 以二进制方式打开文件
  • 判断文件是否打开成功
    if(!out_file)//或者out_file.fail()或者!out_file.is_open()
    {
        //失败处理
    }
    int x=12;
    double y=12.3;
    //以文本形式输出
    out_file<<x<<" "<<y<<endl;
    //以二进制形式输出
    out_file.write((char *)&x,sizeof(x));
    out_file.write((char *)&y,sizeof(y));
    out_file.close();
    //最后一定要关闭文件以使内存缓冲区的内容写到磁盘当中
  • 作用就是使输出结果导入到文件中
  1. 文件的输入操作
    //首先需要打开文件
    //直接方式
    ifstream in_file(<文件名称>,[打开方式]);
    //间接方式
    ifstream in_file;
    in_file.open(<文件名称>,[打开方式]);
  • 打开方式一样有两种为ios::in,ios::binary
   //文件成功打开之后,可以使用>>操作符来进行文件的输入操作
       ifstream in_file("D:\\study.txt", ios::out);
   int x = 1;
   double y = 12.3;
   if(!in_file)
   {
       cout << "文件打开失败" << endl;
       exit(-1);
   }
   else
   {
       in_file >> x >> y;
       cout << x << endl
            << y << endl;
   }
   //在文件末尾处需要判断是否正确读入了数据
   bool flag = true;
   flag = in_file.fail();
   in_file.close();
  1. 既能输入又能输出的对象
  • 创建一个fstream对象,则既可以输入也可以输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值