與C 輸入輸出有關的類和物件

2021-06-28 16:05:48 字數 3699 閱讀 8324

實際上,在記憶體中為每乙個資料流開闢乙個記憶體緩衝區,用來存放流中的資料。當用cout和插入運算子「<>」從輸入緩衝區中提取資料送給程式中的有關變數。總之,流是與記憶體緩衝區相對應的,或者說,緩衝區中的資料就是流。

在c++中,輸入輸出流被定義為類。c++的i/o庫中的類稱為流類(stream class)。 用流類定義的物件稱為流物件。

其實,cout和cin並不是c++語言中提供的語句,它們是iostream類的物件,在不了解類和物件時,在不致引起誤解的前提下,為敘述方便,把它們稱為cout語句和cin語句。正如c++並未提供賦值語句,只提供賦值表示式,在賦值表示式後面加分號就成了c++的語句,為方便起見,我們習慣稱之為賦值語句。又如,在c語言中常用 printf和scanf進行輸出和輸入,printf和scanf是c語言庫函式中的輸入輸出函式,一般也習慣地將由printf和scanf函式構成的語句稱為printf語句和scanf語句。在使用它們時,對其本來的概念應該有準確的理解。

了解了類和物件後,我們對c++的輸入輸出應當有更深刻的認識。

c++編譯系統提供了用於輸入輸出的iostream類庫。iostream這個單詞是由3個部 分組成的,即i-o-stream,意為輸入輸出流。在iostream類庫中包含許多用於輸入輸出的 類。常用的見表13.1。

圖 13.1

表13.1 i/o類庫中的常用流類 類名

作用在哪個標頭檔案中宣告

ios抽象基類

iostream

istream

ostream

iostream

通用輸入流和其他輸入流的基類

通用輸出流和其他輸出流的基類

通用輸入輸出流和其他輸入輸出流的基類

iostream

iostream

iostream

ifstream

ofstream

fstream

輸入檔案流類

輸出檔案流類

輸入輸出檔案流類

fstream

fstream

fstream

istrstream

ostrstream

strstream

輸入字串流類

輸出字串流類

輸入輸出字串流類

strstream

strstream

strstream

ios是抽象基類,由它派生出istream類和ostream類,兩個類名中第1個字母i和o分別代表輸入(input)和輸出(output)。istream類支援輸入操作,ostream類支援輸出操作, iostream類支援輸入輸出操作。iostream類是從istream類和ostream類通過多重繼承而派生的類。其繼承層次見圖13.1表示。

c++對檔案的輸入輸出需要用ifstrcam和ofstream類,兩個類名中第1個字母i和o分別代表輸入和輸出,第2個字母f代表檔案(file)。ifstream支援對檔案的輸入操作, ofstream支援對檔案的輸出操作。類ifstream繼承了類istream,類ofstream繼承了類ostream,類fstream繼承了類iostream。見圖 13.2。

圖 13.2

i/o類庫中還有其他一些類,但是對於一般使用者來說,以上這些已能滿足需要了。如果想深入了解類庫的內容和使用,可參閱所用的c++系統的類庫手冊。iostream類庫中不同的類的宣告被放在不同的標頭檔案中,使用者在自己的程式中用#include命令包含了有關的標頭檔案就相當於在本程式中宣告了所需要用到的類。可以換 —種說法:標頭檔案是程式與類庫的介面,iostream類庫的介面分別由不同的標頭檔案來實現。常用的有在 iostream 標頭檔案中定義的類有 ios,istream,ostream,iostream,istream _withassign, ostream_withassign,iostream_withassign 等。

iostream.h包含了對輸入輸出流進行操作所需的基本資訊。因此大多數c++程式都包括iostream.h。在iostream.h標頭檔案中不僅定義了有關的類,還定義了4種流物件, 見表13.2。

表13.2 檔案中定義的4種流物件 物件

含義對應裝置

對應的類

c語言中相應的標準檔案

cin標準輸入流

鍵盤istream_withassign

stdin

cout

標準輸出流

螢幕ostream_withassign

stdout

cerr

標準錯誤流

螢幕ostream_withassign

stderr

clog

標準錯誤流

螢幕ostream_withassign

stderr

在iostream標頭檔案中定義以上4個流物件用以下的形式(以cout為例):

ostream cout ( stdout);

在定義cout為ostream流類物件時,把標準輸出裝置stdout作為引數,這樣它就與標準輸出裝置(顯示器)聯絡起來,如果有

cout <<3;

就會在顯示器的螢幕上輸出3。「<>」本來在c++中是被定義為左位移運算子和右位移運算子的,由於在iostream標頭檔案中對它們進行了過載,使它們能用作標準型別資料的輸入和輸出運算子。所以,在用它們的程式中必須用#include命令把iostream包含到程式中。

#include

在istream和ostream類(這兩個類都是在iostream中宣告的)中分別有一組成員函式對位移運算子「<>」進行過載,以便能用它輸入或輸出各種標準資料型別的資料。對於不同的標準資料型別要分別進行過載,如:

ostream operator << (im );  //用於向輸出流插入乙個int資料

ostream operator << (float );  //用於向輸出流插入乙個float資料

ostream operator << (char);  //用於向輸出流插入乙個char資料

ostream operator << (char * );  //用於向輸出流插入乙個字串資料

等。如果在程式中有下面的表示式:

cout<

實際上相當於:

cout.operator <

"c ++"的值是其首位元組位址,是字元型指標(char * )型別,因此選擇呼叫上面最後乙個運算子過載函式,通過過載函式的函式體,將字串插入到cout流中,函式返回流物件cout。

在istream類中已將運算子「>> 」過載為對以下標準型別的提取運算子:char, signed char, unsigned char, short, unsigned short, int, unsigned int,long, unsigned long, float, double, long double, char * , signed char *, unsigned char * 等。

在ostream類中將「<

如果想將「<>」用於自己宣告的型別的資料,就不能簡單地採用包含 iostream標頭檔案來解決,必須自己對「<>」進行過載。

怎樣理解運算子「<>」的作用呢?有乙個簡單而形象的方法:它們指出了資料移動的方向,例如

>>a

箭頭方向表示把資料放人a中。而

<

箭頭方向表示從a中拿出資料。

與C 輸入輸出有關的類和物件

實際上,在記憶體中為每乙個資料流開闢乙個記憶體緩衝區,用來存放流中的資料。當用cout和插入運算子 從輸入緩衝區中提取資料送給程式中的有關變數。總之,流是與記憶體緩衝區相對應的,或者說,緩衝區中的資料就是流。在c 中,輸入輸出流被定義為類。c 的i o庫中的類稱為流類 stream class 用流...

c 流類庫與輸入輸出

c與c 輸入輸出對比 c中的printf函式只能輸出系統預定義的型別,而c 可以輸入輸出標準型別和自定義型別的資料。優點 可以防止格式控制符輸入輸出型別資料不一致的錯誤 可以通過過載的方式對自定義的資料進行輸入輸出。c 的輸入輸出流 流是指資料從乙個源流到乙個目的流,負責資料的源到目的的之間建立聯絡...

快速輸入輸出類(C )

我們知道,cin cout是很慢的,所以我們經常scanf printf。但是如果要求更嚴格一些,速度要更快,該怎麼辦呢?有一種解決辦法,那就是 快速輸入輸出。快速輸入輸出採用getchar 和putchar 函式,用了數字累加的方法輸入 輸出數。我們也可以把快速輸入輸出定義成類,就像cin cou...