正文

C++的iostream标准库介绍2009-02-06 17:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/40746.html

分享到:

C++的iostream标准库介绍 作者:管宁 * C++的iostream标准库介绍 o 0 为什么需要iostream o 1 iostream: istream 和 ostream o 2 fstream: ifstream 和 ofstream o 3 strstream: ostrstream 和 istrstream o 4 stringstream o 5 io_state 输入/输出的状态标志 0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。   iostream为内置类型类型对象提供了输入输出支持,同时也支持文件的输入输出,类的设计者可以通过对iostream库的扩展,来支持自定义类型的输入输出操作。   为什么说要扩展才能提供支持呢?我们来一个示例。 #include #include using namespace std; class Test { public: Test(int a=0,int b=0) { Test::a=a; Test::b=b; } int a; int b; }; int main() { Test t(100,50); printf("%???",t);//不明确的输出格式 scanf("%???",t);//不明确的输入格式 cout<>t;//同样不够明确 system("pause"); }   由于自定义类的特殊性,在上面的代码中,无论你使用c风格的输入输出,或者是c++的输入输出都不是不明确的一个表示,由于c语言没有运算符重载机制,导致stdio库的不可扩充性,让我们无法让printf()和scanf()支持对自定义类对象的扩充识别,而c++是可以通过运算符重载机制扩充 iostream库的,使系统能能够识别自定义类型,从而让输入输出明确的知道他们该干什么,格式是什么。   在上例中我们之所以用printf与cout进行对比目的是为了告诉大家,C与C++处理输入输出的根本不同,我们从c远的输入输出可以很明显看出是函数调用方式,而c++的则是对象模式,cout和cin是ostream类和istream类的对象。 1 iostream: istream 和 ostream   C++中的iostream库主要包含下图所示的几个头文件: IOSstream 库 fstream iomainip ios iosfwd iostream istream ostream sstream streambuf strstream   我们所熟悉的输入输出操作分别是由istream(输入流)和ostream(输出流)这两个类提供的,为了允许双向的输入/输出,由istream和ostream派生出了iostream类。   类的继承关系见下图: iostream库定义了以下三个标准流对象: 1. cin,表示标准输入(standard input)的istream类对象。cin使我们可以从设备读如数据。 2. cout,表示标准输出(standard output)的ostream类对象。cout使我们可以向设备输出或者写数据。 3. cerr,表示标准错误(standard error)的osttream类对象。cerr是导出程序错误消息的地方,它只能允许向屏幕设备写数据。   输出主要由重载的左移操作符(<<)来完成,输入主要由重载的右移操作符(>>)完成: 1. >>a表示将数据放入a对象中。 2. < using namespace std; int main() { ofstream myfile("c:\\1.txt",ios::out|ios::trunc,0); myfile<<"中国软件开发实验室"< #include using namespace std; int main() { ofstream myfile("c:\\1.txt",ios::app,0); if(!myfile)//或者写成myfile.fail() { cout<<"文件打开失败,目标文件状态可能为只读!"; system("pause"); exit(1); } myfile<<"中国软件开发实验室"< #include using namespace std; int main() { ofstream myfile; myfile.open("c:\\1.txt",ios::out|ios::app,0); if(!myfile)//或者写成myfile.fail() { cout<<"文件创建失败,磁盘不可写或者文件为只读!"; system("pause"); exit(1); } myfile<<"中国软件开发实验室"< #include #include using namespace std; int main() { ifstream myfile; myfile.open("c:\\1.txt",ios::in,0); if(!myfile) { cout<<"文件读错误"; system("pause"); exit(1); } char ch; string content; while(myfile.get(ch)) { content+=ch; cout.put(ch);//cout< #include using namespace std; int main() { fstream myfile; myfile.open("c:\\1.txt",ios::out|ios::app,0); if(!myfile) { cout<<"文件写错误,文件属性可能为只读!"< #include using namespace std; int main() { char *name = "www.cndev-lab.com"; int arraysize = strlen(name)+1; istrstream is(name,arraysize); char temp; is>>temp; cout< #include using namespace std; int main() { int arraysize=1; char *pbuffer=new char[arraysize]; ostrstream ostr(pbuffer,arraysize,ios::out); ostr< #include #include using namespace std; int main() { stringstream ostr("ccc"); ostr.put('d'); ostr.put('e'); ostr<<"fg"; string gstr = ostr.str(); cout<>a; cout< #include #include using namespace std; int main() { stringstream sstr; //--------int转string----------- int a=100; string str; sstr<>str; cout<>cname; cout< using namespace std; int main() { int a; cin>>a; cout< using namespace std; int main() { int a; cin>>a; cout< using namespace std; int main() { int a; cin>>a; cout< using namespace std; int main() { int a; while(1) { cin>>a; if(!cin)//条件可改写为cin.fail() { cout<<"输入有错!请重新输入"< #include using namespace std; int main() { ifstream myfile("c:\\1.txt",ios_base::in,0); if(myfile.fail()) { cout<<"文件读取失败或指定文件不存在!"<

阅读(2406) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册