溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹

發(fā)布時(shí)間:2020-08-10 23:54:15 來(lái)源:ITPUB博客 閱讀:215 作者:千鋒Python唐小強(qiáng) 欄目:編程語(yǔ)言

我們從一開(kāi)始就一直在利用C++的輸入輸出在做著各種練習(xí),輸入輸出是由iostream庫(kù)提供的,所以討論此標(biāo)準(zhǔn)庫(kù)是有必要的,它與C語(yǔ)言的stdio庫(kù)不同,它從一開(kāi)始就是用多重繼承與虛擬繼承實(shí)現(xiàn)的面向?qū)ο蟮膶哟谓Y(jié)構(gòu),作為一個(gè)c++的標(biāo)準(zhǔn)庫(kù)組件提供給程序員使用。

  iostream為內(nèi)置類型類型對(duì)象提供了輸入輸出支持,同時(shí)也支持文件的輸入輸出,類的設(shè)計(jì)者可以通過(guò)對(duì)iostream庫(kù)的擴(kuò)展,來(lái)支持自定義類型的輸入輸出操作。

   為什么說(shuō)要擴(kuò)展才能提供支持呢?我們來(lái)一個(gè)示例。

#include#includeusing 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<<1t<1<1endl; 同樣不夠明確="" cin>>t;//同樣不夠明確 
 system("pause"); 
}

  由于自定義類的特殊性,在上面的代碼中,無(wú)論你使用c風(fēng)格的輸入輸出,或者是c++的輸入輸出都不是不明確的一個(gè)表示,由于c語(yǔ)言沒(méi)有運(yùn)算符重載機(jī)制,導(dǎo)致stdio庫(kù)的不可擴(kuò)充性,讓我們無(wú)法讓printf()和scanf()支持對(duì)自定義類對(duì)象的擴(kuò)充識(shí)別,而c++是可以通過(guò)運(yùn)算符重載機(jī)制擴(kuò)充iostream庫(kù)的,使系統(tǒng)能能夠識(shí)別自定義類型,從而讓輸入輸出明確的知道他們?cè)摳墒裁?,格式是什么?  在上例中我們之所以用printf與cout進(jìn)行對(duì)比目的是為了告訴大家,C與C++處理輸入輸出的根本不同,我們從c遠(yuǎn)的輸入輸出可以很明顯看出是函數(shù)調(diào)用方式,而c++的則是對(duì)象模式,cout和cin是ostream類和istream類的對(duì)象。   C++中的iostream庫(kù)主要包含下圖所示的幾個(gè)頭文件:

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹

  我們所熟悉的輸入輸出操作分別是由istream(輸入流)和ostream(輸出流)這兩個(gè)類提供的,為了允許雙向的輸入/輸出,由istream和ostream派生出了iostream類。   類的繼承關(guān)系見(jiàn)下圖:

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹


iostream庫(kù)定義了以下三個(gè)標(biāo)準(zhǔn)流對(duì)象:

1.cin,表示標(biāo)準(zhǔn)輸入(standard input)的istream類對(duì)象。cin使我們可以從設(shè)備讀如數(shù)據(jù)。   2.cout,表示標(biāo)準(zhǔn)輸出(standard output)的ostream類對(duì)象。cout使我們可以向設(shè)備輸出或者寫數(shù)據(jù)。 3.cerr,表示標(biāo)準(zhǔn)錯(cuò)誤(standard error)的osttream類對(duì)象。cerr是導(dǎo)出程序錯(cuò)誤消息的地方,它只能允許向屏幕設(shè)備寫數(shù)據(jù)。

輸出主要由重載的左移操作符(<<)來(lái)完成,輸入主要由重載的右移操作符(>>)完成。

>>a表示將數(shù)據(jù)放入a對(duì)象中。

<<1a表示將a對(duì)象中存儲(chǔ)的數(shù)據(jù)拿出。<1 p="" style="-webkit-tap-highlight-color: transparent; box-sizing: border-box;">

這些標(biāo)準(zhǔn)的流對(duì)象都有默認(rèn)的所對(duì)應(yīng)的設(shè)備,見(jiàn)下表:

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹

  圖中的意思表明cin對(duì)象的默認(rèn)輸入設(shè)備是鍵盤,cout對(duì)象的默認(rèn)輸出設(shè)備是顯示器屏幕。   那么原理上C++有是如何利用cin/cout對(duì)象與左移和右移運(yùn)算符重載來(lái)實(shí)現(xiàn)輸入輸出的呢?

下面我們以輸出為例,說(shuō)明其實(shí)現(xiàn)原理:   cout是ostream類的對(duì)象,因?yàn)樗赶虻氖菢?biāo)準(zhǔn)設(shè)備(顯示器屏幕),所以它在iostream頭文件中作為全局對(duì)象進(jìn)行定義。

ostream cout(stdout);//其默認(rèn)指向的C中的標(biāo)準(zhǔn)設(shè)備名,作為其構(gòu)造函數(shù)的參數(shù)使用。

在iostream.h頭文件中,ostream類對(duì)應(yīng)每個(gè)基本數(shù)據(jù)類型都有其友元函數(shù)對(duì)左移操作符進(jìn)行了友元函數(shù)的重載。

ostream& operator<<(ostream &temp,int source);

ostream& operator<<(ostream &temp,char *ps);

。。。。等等

一句輸出語(yǔ)句:cout<<"www.cndev-lab.com";,事實(shí)上調(diào)用的就是ostream& operator<<(ostream &temp,char *ps);這個(gè)運(yùn)算符重載函數(shù),由于返回的是流對(duì)象的引用,引用可以作為左值使用,所以當(dāng)程序中有類似cout<<"www.cndev-lab.com"<<"中國(guó)軟件開(kāi)發(fā)實(shí)驗(yàn)室";這樣的語(yǔ)句出現(xiàn)的時(shí)候,就能夠構(gòu)成連續(xù)輸出。

  由于iostream庫(kù)不光支持對(duì)象的輸入輸出,同時(shí)也支持文件流的輸入輸出,所以在詳細(xì)講解左移與右移運(yùn)算符重載只前,我們有必要先對(duì)文件的輸入輸出以及輸入輸出的控制符有所了解。   和文件有關(guān)系的輸入輸出類主要在fstream.h這個(gè)頭文件中被定義,在這個(gè)頭文件中主要被定義了三個(gè)類,由這三個(gè)類控制對(duì)文件的各種輸入輸出操作,他們分別是ifstream、ofstream、fstream,其中fstream類是由iostream類派生而來(lái),他們之間的繼承關(guān)系見(jiàn)下圖所示。

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹

  由于文件設(shè)備并不像顯示器屏幕與鍵盤那樣是標(biāo)準(zhǔn)默認(rèn)設(shè)備,所以它在fstream.h頭文件中是沒(méi)有像cout那樣預(yù)先定義的全局對(duì)象,所以我們必須自己定義一個(gè)該類的對(duì)象,我們要以文件作為設(shè)備向文件輸出信息(也就是向文件寫數(shù)據(jù)),那么就應(yīng)該使用ofstream類。

ofstream類的默認(rèn)構(gòu)造函數(shù)原形為:

ofstream::ofstream(const char *filename,int mode = ios::out,int openprot = filebuf::openprot);   

filename:  要打開(kāi)的文件名

mode:    要打開(kāi)文件的方式

prot:    打開(kāi)文件的屬性

其中mode和openprot這兩個(gè)參數(shù)的可選項(xiàng)表見(jiàn)下表:

mode屬性表

ios::app:   以追加的方式打開(kāi)文件

ios::ate:   文件打開(kāi)后定位到文件尾,ios:app就包含有此屬性

ios::binary:  以二進(jìn)制方式打開(kāi)文件,缺省的方式是文本方式。兩種方式的區(qū)別見(jiàn)前文   ios::in:    文件以輸入方式打開(kāi)

ios::out:   文件以輸出方式打開(kāi)

ios::trunc:  如果文件存在,把文件長(zhǎng)度設(shè)為0

可以用“或”把以上屬性連接起來(lái),如ios::out|ios::binary。

openprot屬性表:

0:普通文件,打開(kāi)訪問(wèn)

1:只讀文件

2:隱含文件

4:系統(tǒng)文件

可以用“或”或者“+”把以上屬性連接起來(lái) ,如3或1|2就是以只讀和隱含屬性打開(kāi)文件。

最新C++程序iostream標(biāo)準(zhǔn)庫(kù)介紹
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI