面向對想程序設計_第1頁
面向對想程序設計_第2頁
面向對想程序設計_第3頁
面向對想程序設計_第4頁
面向對想程序設計_第5頁
已閱讀5頁,還剩55頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、面向對想程序設計第七章第七章I/O流及輸入輸出流及輸入輸出面向對想程序設計本章要求 理解流的概念 掌握C+的控制臺I/O 掌握C+的文件I/O面向對想程序設計 輸入輸入/輸出(簡稱輸出(簡稱I/O)是程序的一個重)是程序的一個重要組成部分,程序運行所需要的數據往往要從要組成部分,程序運行所需要的數據往往要從外設(如鍵盤、文件等)得到,程序的運行結外設(如鍵盤、文件等)得到,程序的運行結果通常也要輸出到外設(如顯示器、打印機、果通常也要輸出到外設(如顯示器、打印機、文件等)中去。文件等)中去。 在在C+中,輸入中,輸入/輸出不是語言所定義的輸出不是語言所定義的成分,而是由具體的實現(編譯程序)作

2、為標成分,而是由具體的實現(編譯程序)作為標準庫的功能來實現的。準庫的功能來實現的。輸入輸入/輸出輸出面向對想程序設計在在C+中,輸入中,輸入/輸出操作是一種基于字節輸出操作是一種基于字節流的操作。流的操作。流:字節序列的抽象概念。流:字節序列的抽象概念。流提供了一種用統一的方法從各種流提供了一種用統一的方法從各種I/O設備設備中讀取和向其中寫入字節序列的方法。中讀取和向其中寫入字節序列的方法。文件是數據的靜態存儲形式。文件是數據的靜態存儲形式。流是指數據傳輸時的形態。流是指數據傳輸時的形態。流流面向對想程序設計流流面向對想程序設計流流 在程序中,“流”具體體現為一個對象,負責在數據生產者和數

3、據消費者之間建立聯系,控制數據的流動。例如cin、cout就是兩個流對象面向對想程序設計由于由于C+支持過程式和面向對象兩種程序設計支持過程式和面向對象兩種程序設計范型,因此,在范型,因此,在C+中,輸入中,輸入/輸出操作也可以輸出操作也可以以這兩種方式來進行,以這兩種方式來進行,C+標準庫也以兩種方標準庫也以兩種方式提供了輸入式提供了輸入/輸出功能。輸出功能。在在C+中,以過程式的方式進行輸入中,以過程式的方式進行輸入/輸出是通輸出是通過從過從C語言保留下來的函數庫中的輸入語言保留下來的函數庫中的輸入/輸出函輸出函數來實現的,用這些函數可以實現對基本類型數數來實現的,用這些函數可以實現對基本

4、類型數據的據的I/O操作。操作。以面向對象方式進行輸入以面向對象方式進行輸入/輸出則是通過輸出則是通過C+的的I/O類庫來實現的。類庫來實現的。I/O類庫提供的輸入類庫提供的輸入/輸出輸出操作是由一些操作是由一些I/O類來實現的。類來實現的。C+的輸入的輸入/輸出輸出面向對想程序設計C+的流類庫的流類庫-類模板類模板面向對想程序設計iosistreamostreamifstreamistrstreamofstreamostrstreamiostreamfstreamstrstreamC+的流類庫的流類庫面向對想程序設計流類庫的頭文件 :包括istream、ostream、iostream以及c

5、in、cout、ceer和clog對象的定義,同時提供非格式化和格式化的I/O服務。針對標準設備的I/O操作,須包含之。 :包括istringstream、ostringstream、stringstream的定義,要使用字符串流對象進行針對內存字符串空間的I/O操作,須包含此文件。10面向對想程序設計流類庫的頭文件 :包括ifstream、ofstream、fstream的定義,要使用文件流對象進行針對磁盤文件的I/O操作,須包含此文件。 :包括setw、fixed等等操縱符的定義,利用操縱符進行格式化I/O操作,須包含之。11面向對想程序設計istream類提供了類提供了(提取)(提取),

6、用它可以進行用它可以進行基本類型數據的輸入操作。基本類型數據的輸入操作。ostream類提供了類提供了,進行重載,使得通過進行重載,使得通過I/O類的對象可以對用戶自定義的數據(如對類的對象可以對用戶自定義的數據(如對象等)進行輸入象等)進行輸入/輸出操作。輸出操作。C+的流類庫的流類庫面向對想程序設計第七章 I/O流及輸入輸出 控制臺I/O 文件I/O面向對想程序設計第七章 I/O流及輸入輸出控制臺控制臺I/O 文件I/O面向對想程序設計7.1 控制臺I/O控制臺控制臺I/O指從計算機系統的標準輸入設備輸入指從計算機系統的標準輸入設備輸入程序所需要的數據以及把程序的計算結果輸出到計程序所需要

7、的數據以及把程序的計算結果輸出到計算機系統的標準輸出設備。算機系統的標準輸出設備。面向對想程序設計預定義的控制臺對象預定義的控制臺對象 在在I/O類庫中預定義了四個類庫中預定義了四個I/O對象:對象:cin,cout,cerr,clog,利用這些對象可以直接進,利用這些對象可以直接進行控制臺的輸入行控制臺的輸入/輸出。輸出。 cin屬于屬于istream類的對象,它對應計算機的標類的對象,它對應計算機的標準輸入設備,用來處理標準輸入,即鍵盤輸入。準輸入設備,用來處理標準輸入,即鍵盤輸入。 cout,cerr以及以及clog屬于屬于ostream類的對象,類的對象,cout對應計算機的用于輸出程

8、序正常運行結果對應計算機的用于輸出程序正常運行結果的標準輸出設備,而的標準輸出設備,而cerr和和clog則對應計算機則對應計算機的用于輸出程序錯誤信息的設備,用來處理標的用于輸出程序錯誤信息的設備,用來處理標準出錯信息,通常它們都對應顯示器。準出錯信息,通常它們都對應顯示器。cerr不對不對輸出信息進行緩沖。輸出信息進行緩沖。面向對想程序設計內存緩沖區 有效地提高了CPU的使用率 有機會回滾部分寫入的數據應用程序內存緩沖區I/O設備面向對想程序設計屏幕輸出使用預定義的插入符使用預定義的插入符使用成員函數使用成員函數ostream& ostream:put(char ch):輸出一個字

9、符ostream& ostream:write(const char *p,int count):輸出p所指向內存空間中count個字節。cout.put(m);char c=a;cout.put(c);cout.write(“hello”,strlen(“hello”);面向對想程序設計例:向標準設備輸出字符串#include using namespace std;int main()char *word = hello world!;double pi = 3.1415926;int dayOfYear = 365;coutvalue of word is:wordendl;co

10、utPI = piendl;coutdays of year: dayOfYearendl;cout.put(B).put(C).put(n);return 0;19面向對想程序設計運行結果:運行結果:value of word is: hello world!PI = 3.14159days of year: 365BC例(續)面向對想程序設計屏幕輸出 為了對輸出格式進行進一步的控制,可以通過輸出一些操縱符(manipulator)來實現。(書p281)面向對想程序設計鍵盤輸入使用預定義的提取符使用預定義的提取符在輸入時,各個數據之間用空白符分開,一般在輸入時,各個數據之間用空白符分開,一般

11、常用空格符、也可用常用空格符、也可用tab鍵(水平制表符)或鍵(水平制表符)或換行符。因此,從鍵盤輸入字符時,空白符只換行符。因此,從鍵盤輸入字符時,空白符只用于輸入字符的分隔符,而本身不作為從輸入用于輸入字符的分隔符,而本身不作為從輸入流中提取的字符。流中提取的字符。提取符可以從輸入流中讀取一個字符序列,即提取符可以從輸入流中讀取一個字符序列,即一個字符串。在處理這種字符序列時,字符串一個字符串。在處理這種字符序列時,字符串被認為是一個以空白符結束的字符序列。在從被認為是一個以空白符結束的字符序列。在從輸入流中,每讀入一個字符串,系統自動加上輸入流中,每讀入一個字符串,系統自動加上0字符。字

12、符。面向對想程序設計使用成員函數使用成員函數istream:get(char &ch):輸入一個字符該函數不忽略空白字符,即將輸入流的空白字該函數不忽略空白字符,即將輸入流的空白字符也作為一個字符。符也作為一個字符。get()函數從指定流輸入一個字符并將這個值函數從指定流輸入一個字符并將這個值作為函數調用的返回值返回,在遇到文件尾時作為函數調用的返回值返回,在遇到文件尾時返回返回EOF。在在Windows系統中,系統中,EOF=+z鍵盤輸入面向對想程序設計例:輸入字符串#include using namespace std;int main()int character;coutbe

13、fore input, cin.eof()cin.eof()endl;coutplease input a sentence:endl;while(character = cin.get() != EOF) cout.put(character);coutEOF in this system is:characterendl;coutafter input of EOF, cin.eof() = cin.eof()endl;return 0;24面向對想程序設計運行結果:運行結果:before input, cin.eof() = 0please input a sectence:I am a

14、 good C+ programmerI am a good C+ programmerZEOF in this system is: -1After input of EOF, cin.eof() = 1例(續)25面向對想程序設計I/O流的狀態 C+ I/O流的狀態用ios_base中一組狀態標志位來表示,同時定義了一組判斷、操縱這些標志位的成員函數,常用的有bool good()const:剛進行的操作成功時返回true,否則返回false;bool fail()const:與good()相反,剛進行的操作失敗時返回true,否則返回false;26面向對想程序設計I/O流的狀態 C+

15、I/O流的狀態用ios_base中一組狀態標志位來表示,同時定義了一組判斷、操縱這些標志位的成員函數,常用的有bool bad()const:如果進行了非法操作返回true,否則返回false;bad()為true時fail()必為true;bool eof()const:進行輸入操作時,若到達流尾返回true,否則返回false,通常只用于輸入流;eof()為true時fail()必為true;void clear():將流置為正常狀態,使得good()返回true。27面向對想程序設計使用成員函數使用成員函數istream:get(char &ch):輸入一個字符該函數不忽略空白字

16、符,即將輸入流的空白字該函數不忽略空白字符,即將輸入流的空白字符也作為一個字符。符也作為一個字符。istream:getline(char *p,int count,char delim=n):輸入一個字符串直到輸入count-1個字符或遇到delim指定的字符為止,并自動加上一個0.istream:read(char *p,int count):讀入count個字符至p所指向的內存空間。鍵盤輸入面向對想程序設計鍵盤輸入 從輸入流提取時,可以使用操縱符。常用的操縱符有dec,oct和hex,skipws(忽略空白,默認), noskipws (不忽略空白)面向對想程序設計30格式標志對應的二進

17、制位對應二進制位為1時的含義ios_base:skipws 0 x0001輸入時跳過空白字符ios_base:unitbuf 0 x0002每次輸出操作后立即寫緩存ios_base:uppercase 0 x0004數制標志中的字母為大寫ios_base:showbase 0 x0008顯示數制標志ios_base:showpoint 0 x0010即使小數部分為0也顯示小數點ios_base:showpos 0 x00200或正數前顯示+號 ios_base:left 0 x0040左對齊ios_base:right 0 x0080右對齊面向對想程序設計31ios_base:internal

18、 0 x0100內部對齊,即符號在最左端,數值數據右對齊 ios_base:dec 0 x0200整數按十進制輸入/輸出ios_base:oct 0 x0400整數按八進制輸入/輸出ios_base:hex 0 x0800整數按十六進制輸入/輸出 ios_base:scientific 0 x1000按科學表示法(指數格式)顯示浮點數ios_base:fixed 0 x2000按定點格式顯示浮點數面向對想程序設計32ios_base:boolalpha 0 x4000把邏輯值輸出為true和false(否則輸出為1和0)ios_base:adjustfield 0 x0對齊方式域:0 x0=l

19、eft|right|internalios_base:basefield 0 x0e00數制方式域:0 x0e00=dec|oct|hexios_base:floatfield 0 x3000浮點方式域:0 x3000=scientific| fixed面向對想程序設計例:輸入/輸出的數制控制示例#include#includeusing namespace std; int main()int i,j;cinhexij;coutitj;coutendloctitshowbasejendl;return 0;33面向對想程序設計運行結果:運行結果:0 x3f FA63 25077 0372例(

20、續)34面向對想程序設計格式控制操縱符(續) 輸入/輸出寬度的控制有關的操縱符是:setw(n)功能:設置輸入/輸出寬度,其中n為表示寬度的整數;35面向對想程序設計格式控制操縱符(續) 輸出精度的控制精度是針對浮點數設置的,精度設置對于輸入流無效。對于輸出流,初始精度值為6,可以通過設置改為任意精度;將精度設置0意味著回到初始精度6。有關操縱符是:setprecision(n)功能:設置浮點數的精度,其中n為精度的整數;36面向對想程序設計的重載為了能用為了能用和和對自定義類的對象進行輸入輸出對自定義類的對象進行輸入輸出操作,就需要對自定義的類重載操作,就需要對自定義的類重載。class A

21、int x,y; public: friend ostream& operator (ostream & out,const A &a)面向對想程序設計ostream& operator (ostream & out,const A &a) outa.x,a.y; return out;A a,b;coutabendl;的重載面向對想程序設計第七章 I/O流及輸入輸出 控制臺I/O文件文件I/O面向對想程序設計7.2文件I/O面向對想程序設計程序運行結果有時需要永久保存起來,以供其它程程序運行結果有時需要永久保存起來,以供其它程序或本程序下一次運

22、行時使用。程序運行所需要的序或本程序下一次運行時使用。程序運行所需要的數據也常常要從其他程序或本程序上一次運行所保數據也常常要從其他程序或本程序上一次運行所保存的數據中獲得。用于永久性保存數據的設備稱為存的數據中獲得。用于永久性保存數據的設備稱為外部存儲器,如磁盤、光盤等。外部存儲器,如磁盤、光盤等。在外部存儲器中保存數據的方式通常有兩種:文件在外部存儲器中保存數據的方式通常有兩種:文件和數據庫。和數據庫。文件I/O面向對想程序設計文件面向對想程序設計文本文件和二進制文件 文件就是一片內存中的數據在硬盤上的另一種存放形式,也就是二進制數據,即每個文件都是二進制的。 如果一個文件中的每個字節的內

23、容都可以表示成字符的數據,我們就稱這個文件為文本文件。 除了文本文件之外的文件稱為二進制文件。面向對想程序設計文件打開面向對想程序設計fstream iofile(文件名,打開方式);ofstream outfile;out(文件名,打開方式);fstream iofile;io(文件名,打開方式);ifstream infile;in(文件名,打開方式);ofstream outfile(文件名,打開方式);ifstream infile(文件名,打開方式);面向對想程序設計文件打開 可以通過構造函數或open函數的第二個參數,指定文件的打開模式。打開模式被定義為一組枚舉常量:46打開模式打

24、開模式含義含義ios_base:app為添加數據而打開(總是在尾為添加數據而打開(總是在尾部寫)部寫) ios_base:binary作為二進制文件打開作為二進制文件打開 ios_base:in為輸入而打開為輸入而打開ios_base:out為輸出而打開為輸出而打開 ios_base:trunc若文件存在,截為空文件若文件存在,截為空文件ios_base:ate打開時定位于文件尾打開時定位于文件尾面向對想程序設計o當我們按照文本方式往文件中寫入數據時,一旦遇到換行字符(ASCII為10),則會轉換為回車換行(ASCII為13、10)。在讀取文件時,一旦遇到回車換行的組合(即連續的ASCII 1

25、3、10),則會轉換為換行字符(ASCII為10)。o當我們按照二進制方式往文件中寫入數據,則將數據在內存中的存儲形式原樣輸出到文件中。文本方式和二進制方式面向對想程序設計b1b3b2b4 位置位置指針文件打開面向對想程序設計由于種種原因,打開文件操作可能失敗。因此,打開文件時應判斷打開是否成功,只有文件打開成功后才能對文件進行操作。判斷文件打開是否成功可采用以下方式: if(!outfile) 或(out()或!out()文件打開面向對想程序設計文件打開成功后可以使用插入符文件打開成功后可以使用插入符和成員函數和成員函數get,geline,read來進行文件讀操作。來進行文件讀操作。 文件讀寫面向對想程序設計兩種特殊的文件流 以文件名CON打開的輸入文件流所聯系的設備是鍵盤,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論