正文 第十一章 再論C++的輸入_輸出(二)(2 / 3)

稱為提取符,輸入操作又可稱為提取操作。

一、預定義的揮取類型

Visual C++在類ostream中預定義幾個進行輸入操作的重載函數operator(),其原型為:

istream&operator(參數類型);

其中,參數類型同輸出運算符函數一樣,但沒有void*(指針)類型。

對提取符:>有如下說明:

1.當執行提取操作時,編譯器可以自動判別所要輸入的數據類型,無須用戶指明。但如果是用戶自定義的類型,則需要自己重載函數operators()。

2.和插入符,以讀取多個數據項。

3.進行提取操作時,缺省情況下(可以通過格式化輸入/輸出,控製輸入格式),首先跳過輸入數據前麵的空格,並把輸入數據中的空格作為這個數據和下個數據的分隔符。

如果輸入的數據為:

xyz那麼ch的值為X。注意前麵的兩個空格被忽略了,所以,ch的值不是空格符。提取字符串型數據charstr[100];cin>str;如果輸入的數據為:jackSmithstr中存放的是字符串。提取字串jackSmith時,首先跳過前麵的空格(如果有的話),然後提取字符串jack,當遇到jack和Smith之間的空格時,停止提取。

4.除了可利用operated0函數執行輸入操作,.類istream中還定義了其他的用於輸入的成員函數:

getline()函數用來接受一個字符串序列,不管字符串中是否有空格。getline()函數中第三個參數是一個字符型,用來指定接受字符串的終止符,當未讀完1定長度的數據時,若遇到該終止符便停止讀入數據,缺省值為0(回車)。

則其功能如同cin。read()和get()函數,使用上同輸出成員函數write()和put()的功能基本一樣,不過是用來輸入。

二、重載提取符:

通常情況下,使用提取符>隻能輸出C++內建的基本類型的數據。如果要用來輸入自己定義的數據類型的數據,就要重載提取符。

重載提取符的函數原型的一般形式為:

1.該運算符函數必須說明為友元函數,因為提取符為雙目運算符,左邊的操作數是istream類的對象,如cin,右邊的操作數才是該類的對象,如cin>*ob。

2.函數operatoio()返回類型是對istream類的引用。

3.函數operators()接受兩個參數,第一個參數為類istream的引用類型,第二個參數也必須是該類引用類型。

11.6文件輸入/輸出流

控製文件輸入與輸出對於多數應用程序都非常重要。Visual C++提供了一套用於文件輸入與輸出的函數庫,它們的定義包含在頭文件fstream.h中。在fstream.h中定義了與文件的輸入/輸出有關的類ifstream,,ofstream和fstreaj。

若為了輸入而打開文件(讀文件),則可以使用ifstream類的對象。為了輸出而打開文件(寫文件),則可以使用ofetream類的對象。若想進行輸入輸出兩方麵操作,則應使用fstream類的對象。

文件流類是先前討論的數據輸入/輸出流類的派生類,所以數據輸入/輸出流類中所有的成員函數與數據成員皆可用於文件流中。

在使用文件流類時,必須在程序中包含頭文件fctream.h。

一、打開一個文件流

當我們定義一個fstream類對象的同時,就打開了一個文件。

定義一個fetream類對象的一般形式為:

fstream對象名(文件名,打開方式);

該語句把fstream類的對象和要打開文件連接起來。

下麵我們來做一下說明:

1.定義類fstieam的對象時,必須給予兩個參數。第一個參數指明要打開的文件名,可以是包括完整的路徑的文件名;第二個參數為文件打開方式,打開方式定義在基類ios中。