C++输入输出类的层次
在 C++ 中,輸入輸出數(shù)據(jù)的傳送過(guò)程稱(chēng)為流。一個(gè)流就是一個(gè)字節(jié)序列,對(duì)流可以進(jìn)行讀或?qū)懖僮鳌?/p>
輸入輸出類(lèi)層次可以分為輸入輸出流類(lèi)層次和緩沖類(lèi)層次,我們先來(lái)看一下 C++ 的輸入輸出流類(lèi)層次,見(jiàn)下圖。
在 C++ 中,輸入輸出流層次是從 ios_basic 類(lèi)開(kāi)始的,該類(lèi)作為所有類(lèi)的基類(lèi),之后它派生出了 basic_ios 類(lèi),這兩個(gè)類(lèi)是整個(gè)輸入輸出流類(lèi)層次的基類(lèi),但是它們?cè)诠δ苌嫌行﹨^(qū)別:ios_basic 和 basic_ios 都在一定程度上描述了流的基本性質(zhì),但是 ios_basic 并沒(méi)有考慮流的字符集,而 basic_ios 在描述流的基本性質(zhì)時(shí)考慮了此點(diǎn)。
basic_ios 類(lèi)派生出了 basic_istream 和 basic_ostream 類(lèi),其中 basic_istream 類(lèi)用于描述輸入流,而 basic_ostream 用于描述輸出流。 basic_istream 和 basic_ostream 類(lèi)分別繼承了 ios_base 和 basic_ios 類(lèi)中的成員函數(shù),并且增添了自己的成員函數(shù),例如分別對(duì)左移操作符和右移操作符的重載函數(shù)。
basic_iostream 類(lèi)同時(shí)繼承了 basic_istream 類(lèi)和 basic_ostream 類(lèi),該類(lèi)并沒(méi)有新增成員變量,在成員函數(shù)方面,它也只是增添了構(gòu)造函數(shù)和析構(gòu)函數(shù)。而 basic_ifstream 和 basic_ofstream 類(lèi)分別繼承自 basic_istream 類(lèi)和 basic_ostream 類(lèi),basic_ifstream 和 basic_ofstream 類(lèi)主要是對(duì)文件進(jìn)行讀寫(xiě)操作。
在 C++ 中,輸入和輸出并不是直接進(jìn)行讀和寫(xiě)操作的,通常讀和寫(xiě)操作是通過(guò)一個(gè)緩沖區(qū)來(lái)進(jìn)行的。當(dāng)計(jì)算機(jī)收到寫(xiě)字符的請(qǐng)求時(shí),計(jì)算機(jī)并不會(huì)將等待寫(xiě)入的字符直接寫(xiě)入到輸出流中,而是將其先寫(xiě)到緩沖區(qū)中,然后定期地將緩沖區(qū)中的字符寫(xiě)入到輸出流中,此過(guò)程我們稱(chēng)之為清掃緩沖區(qū),通常緩沖區(qū)滿(mǎn)或者換行符會(huì)帶動(dòng)一次將緩沖區(qū)中的字符寫(xiě)到輸出流中。讀入操作也同樣會(huì)經(jīng)過(guò)緩沖區(qū),也有類(lèi)似的過(guò)程。
在緩沖類(lèi)層次中,所有緩沖類(lèi)都從公共基類(lèi) basic_streambuf 類(lèi)派生而來(lái),見(jiàn)下圖。字符流緩沖類(lèi) basic_stringbuf 和文件緩沖類(lèi) basic_filebuf,這兩個(gè)類(lèi)為輸入輸出類(lèi)提供輸入輸出服務(wù),它們從 basic_streambuf 類(lèi)中繼承了對(duì)緩沖區(qū)讀寫(xiě)操作的函數(shù)。
在程序中聲明頭文件,就相當(dāng)于在程序中聲明了相關(guān)的類(lèi),可以說(shuō)頭文件是程序與類(lèi)庫(kù)的接口,在大致了解了輸入輸出類(lèi)層次之后,我們來(lái)看一下頭文件的用途
| iosfwd | 包含一些基本的類(lèi)聲明 |
| iostream | 聲明了 cin、cout 等對(duì)象 |
| ios | 聲明了 ios_base 類(lèi)和 basic_ios 類(lèi) |
| streambuf | 聲明了 basic_streambuf 類(lèi) |
| istream | 聲明了 basic_istream 類(lèi)和 basic_iostream 類(lèi) |
| ostream | 聲明了 basic_ostream 類(lèi) |
| iomanip | 聲明了用于格式化處理的操縱符 |
| sstream | 聲明了 basic_stringbuf 類(lèi)和 stringstream 類(lèi) |
| fstream | 聲明了 basic_filebuf 類(lèi)和 fstream 類(lèi) |
在這些頭文件中我們常用頭文件有:iostream、fstream、strstream、iomanip。Iostream 頭文件中包含了對(duì)輸入輸出流進(jìn)行操作所需要的基本信息,fstream 則用于對(duì)文件的讀寫(xiě)操作,strstream 頭文件可以用于輸入輸出字符串,而 iomanip 則主要是用于格式化輸入輸出。
總結(jié)
以上是生活随笔為你收集整理的C++输入输出类的层次的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++标准输出流对象
- 下一篇: s3c2440移植MQTT