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);



posted @ 2013-09-20 19:14  N3verL4nd  阅读(240)  评论(0编辑  收藏  举报