c++IO对象不可复制

IO类型的3个独立的头文件:

iostream定义读写控制窗口的类型,

fstream 定义读写已命名文件的类型,             (包含fstream类)

sstream定义读写存储在内存中的string对象。(包含了stringstream类)

IO类型不可复制或赋值

因此,IO类型不可存储在vector容器中。(IO是流对象,而流对象是不能复制的,所以不能存储在vector容器中)

ofstream out1,out2;

out2 = out1; //error : cannot assign stream objects

ofstream print(ofstream);

out2 = print(out2); //error:cannot copy stream objects

形参或返回类型也不能为流类型。如果要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。

ofstream &print(ofstream&); //ok:takes a reference,no copy

while(print(out2)) { ... }          // ok:pass reference to out2

一般,如果要传递IO对象以便对它进行读写,可用非const引用的方式传递这个流对象。对IO对象的读写会改变它的状态,因此引用必须是非const的。

练习:

1)ostream print(ostream os);

     这个声明是错的:首先,IO对象是不能复制的,要传递或返回IO对象时,必须传递或返回指向该对象的指针或引用。

      应该改成:   ostream &print(ostream& os);

2) 假设os是一个ofstream对象,下面程序做了什么?

os<<"Goodbye"<<endl;

    以下是我试着写的代码:

#include <fstream>

#include <string>

#include <stdio.h>

using namespace std;

ifstream in("input.txt");

ofstream out("output.txt");

int main()

{

string str = "hi in";

out<<str<<endl;

return 0;

}

首先, out<<----------输出

   in>> ----------输入

case 1:   os --- ofstream

   正常输出

case 2:   os --- ifstream

   << 不对, 

   也不能写入 endl;

   应该改成: string str; os>>str; 

case 3:   os --- ostringstream -----------这个不是针对文件流的,而是通过写入内存,所以不会在默认目录中自动生成一个名字为“output.txt”的文件。

                此代码能正常运行,但是看不到有何运行结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值