前言
在程序經常實現數據的輸入和輸出,c++通過一種稱為流(stream)的機制提供了更為精良的輸入和輸出方法。流是一種靈活且面向對象的I/o方法。
根據操作對象不同分為文件流、字符串流、控制台流。
控制台流
我們所熟悉的輸入輸出操作分別是由istream(輸入流)和ostream(輸出流)這兩個類提供的,為了允許雙向的輸入/輸出,由istream和ostream派生出了iostream類。
類的繼承關系如下圖:
是一種多繼承的關系,在程序應用可以只包含頭文件iostream。
函數 | 功能 | 應用 | 操作符 |
---|---|---|---|
cin | 輸入(standard input)的istream類對象 | 從設備讀入數據 |
> |
cout | 輸出(standard output)的ostream類對象 | 向設備輸出或者寫數據 | << |
cerr | 標准錯誤(standard error)的ostream類對象 | 屏幕設備寫數據 | << |
上面的<<和>>操作符,是因為iostream.h頭文件中,ostream類對應每個基本數據類型都有其友元函數對左移操作符進行了友元函數的重載。
文件流
文件流的輸入輸出類在fstream頭文件被定義,和上面繼承關系為:
由於文件設備不像顯示器屏幕和鍵盤那樣標准的默認設備,所以我們定義一個流對象。
ofstream類的默認構造函數原形為:
ofstream::ofstream(constchar *filename,int mode = ios::out, int penprot = filebuf::openprot);
參數 | 值來源 |
---|---|
filename | 打開的文件名 |
mode | 打開文件的模式(ios:out) |
prot | 打開文件屬性(filebuf::openprot) |
- mode屬性表
類型 | 解釋 |
---|---|
ios::app | 追加方式打開文件 |
ios::ate | 文件打開后定位到文件尾,app就包含有此屬性 |
ios::binary | 以二進制方式打開文件,缺省的方式是文本方式 |
ios::in | 文件以輸入方式打開 (ifstream) |
ios::out | 文件以輸出方式打開 (ofstream) |
ios::nocreate | 不建立文件,所以文件不存在時打開失敗 |
ios::noreplace | 不覆蓋文件,打開文件時如果文件存在失敗 |
- 打開文件屬性值
類型 | 解釋 |
---|---|
0 | 普通文件,打開訪問 |
1 | 只讀文件 |
2 | 隱含文件 |
4 | 系統文件 |
“或”或者“+”把以上屬性連接起來,如3或1|2就是以只讀和隱含屬性打開文件。 文件使用完后可以使用close成員函數關閉文件。
ios::app為追加模式,在使用追加模式的時候同時進行文件狀態的判斷是一個比較好的習慣。
字符串流
理解就是能夠控制字符串類型對象進行輸入輸出的類,C++不光可以支持C++風格的字符串流控制,還可以支持C風格的字符串流控制。
繼承關系如下圖:
類 | 作用 |
---|---|
istrstream | C風格的串流的輸入操作,字符串數組作為輸入。 |
ostrstream | C風格的串流的輸出操作,字符串數組作為輸出。 |
strstream | 支持C風格的串流的輸入輸出操作。 |
版權聲明:本文為博主原創文章,未經博主允許不得轉載。