C++輸入與輸出流的層次

在C++中,輸入輸出數據的傳送過程我們稱之爲流,一個流就是一個字節序列,對流可以進行讀或寫操作。

輸入輸出類層次可以分爲輸入輸出流類層次和緩衝類層次,我們先來看一下C++的輸入輸出流類層次,見下圖。

在C++中,輸入輸出流層次是從ios_basic類開始的,該類作爲所有類的基類,之後它派生出了basic_ios類,這兩個類是整個輸入輸出流類層次的基類,但是它們在功能上有些區別:ios_basic和basic_ios都在一定程度上描述了流的基本性質,但是ios_basic並沒有考慮流的字符集,而basic_ios在描述流的基本性質時考慮了此點。

之後則從basic_ios類中派生出了basic_istream和basic_ostream類,其中basic_istream類用於描述輸入流而basic_ostream用於描述輸出流。 basic_istream和basic_ostream類分別繼承了ios_base和basic_ios類中的成員函數,並且增添了自己的成員函數,例如分別對左移操作符和右移操作符的重載函數。

basic_iostream類則是同時繼承了basic_istream類和basic_ostream類,該類並沒有新增成員變量,在成員函數方面,它也只是增添了構造函數和析構函數。而basic_ifstream和basic_ofstream類,這兩個類分別繼承自basic_istream類和basic_ostream類,basic_ifstream和basic_ofstream類主要是對文件進行讀寫操作。

在C++中輸入和輸出並不是直接地進行讀和寫操作的,通常讀和寫操作是通過一個緩衝區來進行的。當計算機收到寫字符的請求時,計算機並不會將等待寫入的字符直接寫入到輸出流中,而是將其先寫到緩衝區中,然後定期地將緩衝區中的字符寫入到輸出流中,此過程我們稱之爲清掃緩衝區,通常緩衝區滿或者換行符會帶動一次將緩衝區中的字符寫到輸出流中。讀入操作也同樣會經過緩衝區,也有類似的過程。

在緩衝類層次中,所有緩衝類都從公共基類basic_streambuf類派生而來,見下圖。字符流緩衝類basic_stringbuf和文件緩衝類basic_filebuf,這兩個類爲輸入輸出類提供輸入輸出服務,它們從basic_streambuf類中繼承了對緩衝區讀寫操作的函數。

在程序中聲明頭文件,就相當於在程序中聲明瞭相關的類,可以說頭文件是程序與類庫的接口,在大致瞭解了輸入輸出類層次之後,我們來看一下頭文件的用途。

頭文件 用途
iosfwd 包含一些基本的類聲明
iostream 聲明瞭cin、cout等對象
ios 聲明瞭ios_base類和basic_ios類
streambuf 聲明瞭basic_streambuf類
istream 聲明瞭basic_istream類和basic_iostream類
ostream 聲明瞭basic_ostream類
iomanip 聲明瞭用於格式化處理的操縱符
sstream 聲明瞭basic_stringbuf類和stringstream類
fstream 聲明瞭basic_filebuf類和fstream類
在這些頭文件中我們常用頭文件有:iostream、fstream、strstream、iomanip。Iostream頭文件中包含了對輸入輸出流進行操作所需要的基本信息,fstream則用於對文件的讀寫操作,strstream頭文件可以用於輸入輸出字符串,而iomanip則主要是用於格式化輸入輸出。本文轉載 有疑問請聯繫 http://www.imt-imt.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章