iostream庫定義了以下三個標準流物件:
1.cin,表示標準輸入(standard input)的istream類物件。cin使我們可以從裝置讀如資料。
2.cout,表示標準輸出(standard output)的ostream類物件。cout使我們可以向裝置輸出或者寫資料。
3.cerr,表示標準錯誤(standard error)的osttream類物件。cerr是匯出程式錯誤訊息的地方,它只能允許向螢幕裝置寫資料。
輸出主要由過載的左移操作符(<<)來完成,輸入主要由過載的右移操作符(>>)完成。
>>a表示將資料放入a物件中。
<
圖中的意思表明cin物件的預設輸入裝置是鍵盤,cout物件的預設輸出裝置是顯示器螢幕。
那麼原理上c++有是如何利用cin/cout物件與左移和右移運算子過載來實現輸入輸出的呢?
下面我們以輸出為例,說明其實現原理:
cout是ostream類的物件,因為它所指向的是標準裝置(顯示器螢幕),所以它在iostream標頭檔案中作為全域性物件進行定義。
ostream cout(stdout);//其預設指向的c中的標準裝置名,作為其建構函式的引數使用。
在iostream.h標頭檔案中,ostream類對應每個基本資料型別都有其友元函式對左移操作符進行了友元函式的過載。
ostream& operator<<(ostream &temp,int source);
ostream& operator<<(ostream &temp,char *ps);
。。。。等等
一句輸出語句:cout<<"www.***ev-lab.com";,事實上呼叫的就是ostream& operator<<(ostream &temp,char *ps);這個運算子過載函式,由於返回的是流物件的引用,引用可以作為左值使用,所以當程式中有類似cout<<"www.***ev-lab.com"<<"中國軟體開發實驗室";這樣的語句出現的時候,就能夠構成連續輸出。
由於iostream庫不光支援物件的輸入輸出,同時也支援檔案流的輸入輸出,所以在詳細講解左移與右移運算子過載隻前,我們有必要先對檔案的輸入輸出以及輸入輸出的控制符有所了解。
和檔案有關係的輸入輸出類主要在fstream.h這個標頭檔案中被定義,在這個標頭檔案中主要被定義了三個類,由這三個類控制對檔案的各種輸入輸出操作,他們分別是ifstream、ofstream、fstream,其中fstream類是由iostream類派生而來,他們之間的繼承關係見下圖所示。
由於檔案裝置並不像顯示器螢幕與鍵盤那樣是標準預設裝置,所以它在fstream.h標頭檔案中是沒有像cout那樣預先定義的全域性物件,所以我們必須自己定義乙個該類的物件,我們要以檔案作為裝置向檔案輸出資訊(也就是向檔案寫資料),那麼就應該使用ofstream類。
ofstream類的預設建構函式原形為:
ofstream::ofstream(const char *filename,int mode = ios::out,int openprot = filebuf::openprot);
filename: 要開啟的檔名
mode: 要開啟檔案的方式
prot: 開啟檔案的屬性
其中mode和openprot這兩個引數的可選項表見下表:
mode屬性表
0:普通檔案,開啟訪問
1:唯讀檔案
2:隱含檔案
4:系統檔案
可以用「或」或者「+」把以上屬性連線起來 ,如3或1|2就是以唯讀和隱含屬性開啟檔案。
c 標準庫介紹
c 標準庫的所有標頭檔案都沒有副檔名。c 標準庫的內容總共在50個標準標頭檔案中定義,其中18個提供了c庫的功能。形式的標準標頭檔案 例外 其內容與iso標準c包含的name.h標頭檔案相同,但容納了c 擴充套件的功能。在形式標準的標頭檔案中,與巨集相關的名稱在全域性作用域中定義,其他名稱在std命...
C 中標頭檔案iostream介紹
c 語言不直接處理輸入輸出,而是通過一簇定義在標準庫中的型別來處理io。這些型別支援從裝置讀取資料 向裝置寫入資料的io操作,裝置可以是檔案 控制台視窗等。還有一些型別允許記憶體io,即,從string讀取資料,向string寫入資料。c c 11中標頭檔案定義了標準輸入 輸出流物件。包含了也自動包...
C 的標準輸入 輸出庫 iostream
standard i o stream c 的標準輸入 輸出庫 iostream 不僅提供了i o庫,還提供了使用庫的流模式 cin 流入和 cout 流出到輸出裝置的操作符 1.流狀態 stream states 1st showpos 在正數 含0 前顯示 號 2nd showbase hex前...