譚浩強(qiáng)《C++程序設(shè)計(jì)》課件 第13章.ppt
《譚浩強(qiáng)《C++程序設(shè)計(jì)》課件 第13章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《譚浩強(qiáng)《C++程序設(shè)計(jì)》課件 第13章.ppt(99頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第13章 輸入輸出流,13.1 C++的輸入和輸出 13.2 標(biāo)準(zhǔn)輸出流 13.3 標(biāo)準(zhǔn)輸入流 13.4 文件操作與文件流 13.5 字符串流,以前所用到的輸入和輸出,都是以終端為對(duì)象的,即從鍵盤(pán)輸入數(shù)據(jù),運(yùn)行結(jié)果輸出到顯示器屏幕上。從操作系統(tǒng)的角度看,每一個(gè)與主機(jī)相連的輸入輸出設(shè)備都被看作一個(gè)文件。除了以終端為對(duì)象進(jìn)行輸入和輸出外,還經(jīng)常用磁盤(pán)(光盤(pán))作為輸入輸出對(duì)象,磁盤(pán)文件既可以作為輸入文件,也可以作為輸出文件。 程序的輸入指的是從輸入文件將數(shù)據(jù)傳送給程序,程序的輸出指的是從程序?qū)?shù)據(jù)傳送給輸出文件。C++的輸入與輸出包括以下3方面的內(nèi)容:,13.1 C++的輸入和輸出 13.1.1 輸
2、入輸出的含義,(1) 對(duì)系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入和輸出。即從鍵盤(pán)輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標(biāo)準(zhǔn)的輸入輸出,簡(jiǎn)稱標(biāo)準(zhǔn)I/O。 (2) 以外存磁盤(pán)文件為對(duì)象進(jìn)行輸入和輸出,即從磁盤(pán)文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤(pán)文件。以外存文件為對(duì)象的輸入輸出稱為文件的輸入輸出,簡(jiǎn)稱文件I/O。 (3) 對(duì)內(nèi)存中指定的空間進(jìn)行輸入和輸出。通常指定一個(gè)字符數(shù)組作為存儲(chǔ)空間(實(shí)際上可以利用該空間存儲(chǔ)任何信息)。這種輸入和輸出稱為字符串輸入輸出,簡(jiǎn)稱串I/O。 C++采取不同的方法來(lái)實(shí)現(xiàn)以上3種輸入輸出。 為了實(shí)現(xiàn)數(shù)據(jù)的有效流動(dòng),C++系統(tǒng)提供了龐大的I/O類(lèi)庫(kù),調(diào)用不同的類(lèi)去實(shí)現(xiàn)不同的功能。,在C語(yǔ)言中
3、,用printf和scanf進(jìn)行輸入輸出,往往不能保證所輸入輸出的數(shù)據(jù)是可靠的、安全的。 在C++的輸入輸出中,編譯系統(tǒng)對(duì)數(shù)據(jù)類(lèi)型進(jìn)行嚴(yán)格的檢查,凡是類(lèi)型不正確的數(shù)據(jù)都不可能通過(guò)編譯。因此C++的I/O操作是類(lèi)型安全(type safe)的。 C++的I/O操作是可擴(kuò)展的,不僅可以用來(lái)輸入輸出標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù),也可以用于用戶自定義類(lèi)型的數(shù)據(jù)。C++對(duì)標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù)和對(duì)用戶聲明類(lèi)型數(shù)據(jù)的輸入輸出,采用同樣的方法處理。 C++通過(guò)I/O類(lèi)庫(kù)來(lái)實(shí)現(xiàn)豐富的I/O功能。C++的輸入輸出優(yōu)于C語(yǔ)言中的printf和scanf,但是比較復(fù)雜,要掌握許多細(xì)節(jié)。,13.1.2 C++的I/O對(duì)C的發(fā)展類(lèi)型安全和可
4、擴(kuò)展性,C++的輸入輸出流是指由若干字節(jié)組成的字節(jié)序列,這些字節(jié)中的數(shù)據(jù)按順序從一個(gè)對(duì)象傳送到另一對(duì)象。流表示了信息從源到目的端的流動(dòng)。在輸入操作時(shí),字節(jié)流從輸入設(shè)備(如鍵盤(pán)、磁盤(pán))流向內(nèi)存,在輸出操作時(shí),字節(jié)流從內(nèi)存流向輸出設(shè)備(如屏幕、打印機(jī)、磁盤(pán)等)。流中的內(nèi)容可以是ASCII字符、二進(jìn)制形式的數(shù)據(jù)、圖形圖像、數(shù)字音頻視頻或其他形式的信息。 實(shí)際上,在內(nèi)存中為每一個(gè)數(shù)據(jù)流開(kāi)辟一個(gè)內(nèi)存緩沖區(qū),用來(lái)存放流中的數(shù)據(jù)。流是與內(nèi)存緩沖區(qū)相對(duì)應(yīng)的,或者說(shuō),緩沖區(qū)中的數(shù)據(jù)就是流。,13.1.3 C++的輸入輸出流,在C++中,輸入輸出流被定義為類(lèi)。C++的I/O庫(kù)中的類(lèi)稱為流類(lèi)(stream clas
5、s)。用流類(lèi)定義的對(duì)象稱為流對(duì)象。 cout和cin并不是C++語(yǔ)言中提供的語(yǔ)句,它們是iostream類(lèi)的對(duì)象,在未學(xué)習(xí)類(lèi)和對(duì)象時(shí),在不致引起誤解的前提下,為敘述方便,把它們稱為cout語(yǔ)句和cin語(yǔ)句。 在學(xué)習(xí)了類(lèi)和對(duì)象后,我們對(duì)C++的輸入輸出應(yīng)當(dāng)有更深刻的認(rèn)識(shí)。,1. iostream類(lèi)庫(kù)中有關(guān)的類(lèi) C++編譯系統(tǒng)提供了用于輸入輸出的iostream類(lèi)庫(kù)。iostream這個(gè)單詞是由3個(gè)部分組成的,即i-o-stream,意為輸入輸出流。在iostream類(lèi)庫(kù)中包含許多用于輸入輸出的類(lèi)。常用的見(jiàn)書(shū)中表13.1。 ios是抽象基類(lèi),由它派生出istream類(lèi)和ostream類(lèi),兩個(gè)類(lèi)名中
6、第1個(gè)字母i和o分別代表輸入(input)和輸出(output)。istream類(lèi)支持輸入操作,ostream類(lèi)支持輸出操作,iostream類(lèi)支持輸入輸出操作。 iostream類(lèi)是從istream類(lèi)和ostream類(lèi)通過(guò)多重繼承而派生的類(lèi)。其繼承層次見(jiàn)圖13.1表示。,圖13.1 C++對(duì)文件的輸入輸出需要用ifstream和ofstream類(lèi),兩個(gè)類(lèi)名中第1個(gè)字母i和o分別代表輸入和輸出,第2個(gè)字母f代表文件(file)。ifstream支持對(duì)文件的輸入操作,ofstream支持對(duì)文件的輸出操作。類(lèi)ifstream繼承了類(lèi)istream,類(lèi)ofstream繼承了類(lèi)ostream,類(lèi)fst
7、ream繼承了類(lèi)iostream。見(jiàn)圖13.2。,圖13.2 I/O類(lèi)庫(kù)中還有其他類(lèi),見(jiàn)圖13.3。,圖13.3,2. 與iostream類(lèi)庫(kù)有關(guān)的頭文件 iostream類(lèi)庫(kù)中不同的類(lèi)的聲明被放在不同的頭文件中,用戶在自己的程序中用#include命令包含了有關(guān)的頭文件就相當(dāng)于在本程序中聲明了所需要用到的類(lèi)??梢該Q一種說(shuō)法: 頭文件是程序與類(lèi)庫(kù)的接口,iostream類(lèi)庫(kù)的接口分別由不同的頭文件來(lái)實(shí)現(xiàn)。常用的有 iostream包含了對(duì)輸入輸出流進(jìn)行操作所需的基本信息。 fstream用于用戶管理的文件的I/O操作。 strstream用于字符串流I/O。 stdiostream用于混合使用
8、C和C++的I/O機(jī)制時(shí)。 iomanip在使用格式化I/O時(shí)應(yīng)包含此頭文件。,3. 在iostream頭文件中定義的流對(duì)象 在iostream頭文件中定義的類(lèi)有ios,istream,ostream,iostream,istream _withassign, ostream_withassign,iostream_withassign等。 iostream.h包含了對(duì)輸入輸出流進(jìn)行操作所需的基本信息。因此大多數(shù)C++程序都包括iostream.h。在iostream.h頭文件中不僅定義了有關(guān)的類(lèi),還定義了4種流對(duì)象,見(jiàn)書(shū)中表13.2。 cin是istream的派生類(lèi)istream_witha
9、ssign的對(duì)象,它是從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))輸入到內(nèi)存的數(shù)據(jù)流,稱為cin流或標(biāo)準(zhǔn)輸入流。cout是ostream的派生類(lèi)ostream_withassign的對(duì)象,它是從內(nèi)存輸入到標(biāo)準(zhǔn)輸出設(shè)備(顯示器) 的數(shù)據(jù)流,稱為cout流或標(biāo)準(zhǔn)輸出流。,cerr和clog作用相似,均為向輸出設(shè)備(顯示器) 輸出出錯(cuò)信息。因此用鍵盤(pán)輸入時(shí)用cin流,向顯示器輸出時(shí)用cout流。向顯示器輸出出錯(cuò)信息時(shí)用cerr和clog流。 在iostream頭文件中定義以上4個(gè)流對(duì)象用以下的形式(以cout為例): ostream cout (stdout); 在定義cout為ostream流類(lèi)對(duì)象時(shí),把標(biāo)準(zhǔn)輸出設(shè)備s
10、tdout作為參數(shù),這樣它就與標(biāo)準(zhǔn)輸出設(shè)備(顯示器)聯(lián)系起來(lái),如果有 cout<<3; 就會(huì)在顯示器的屏幕上輸出3。,4. 在iostream頭文件中重載運(yùn)算符 “”本來(lái)在C++中是被定義為左位移運(yùn)算符和右位移運(yùn)算符的,由于在iostream頭文件中對(duì)它們進(jìn)行了重載,使它們能用作標(biāo)準(zhǔn)類(lèi)型數(shù)據(jù)的輸入和輸出運(yùn)算符。所以,在用它們的程序中必須用#include命令把iostream包含到程序中。 #include 在istream和ostream類(lèi)(這兩個(gè)類(lèi)都是在iostream中聲明的)中分別有一組成員函數(shù)對(duì)位移運(yùn)算符“”進(jìn)行重載,以便能用它輸入或輸出各種標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型的數(shù)據(jù)。對(duì)于不同的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型
11、要分別進(jìn)行重載,如 ostream operator << (int );//用于向輸出流插入一個(gè)int數(shù)據(jù) ostream operator << (float ); //用于向輸出流插入一個(gè)float數(shù)據(jù),ostream operator ”重載為對(duì)以下標(biāo)準(zhǔn)類(lèi)型的提取運(yùn)算符: char,signed char,unsigned char,short,unsigned short,int,unsigned int,,long,unsigned long,float, double,long double, char*,signed char*,unsigned char*等。 在ostrea
12、m類(lèi)中將“”用于自己聲明的類(lèi)型的數(shù)據(jù),就不能簡(jiǎn)單地采用包含iostream頭文件來(lái)解決,必須自己用第11章的方法對(duì)“”進(jìn)行重載。 怎樣理解運(yùn)算符“”的作用呢?它們指出了數(shù)據(jù)移動(dòng)的方向,例如 a 箭頭方向表示把數(shù)據(jù)放入a中。而 <
13、ostream中定義。 (2) 用“cout<<”輸出基本類(lèi)型的數(shù)據(jù)時(shí),可以不必考慮數(shù)據(jù)是什么類(lèi)型,系統(tǒng)會(huì)判斷數(shù)據(jù)的類(lèi)型,并根據(jù)其類(lèi)型選擇調(diào)用與之匹配的運(yùn)算符重載函數(shù)。,13.2.1 cout,cerr和clog流,(3) cout流在內(nèi)存中對(duì)應(yīng)開(kāi)辟了一個(gè)緩沖區(qū),用來(lái)存放流中的數(shù)據(jù),當(dāng)向cout流插入一個(gè)endl時(shí),不論緩沖區(qū)是否已滿,都立即輸出流中所有數(shù)據(jù),然后插入一個(gè)換行符,并刷新流(清空緩沖區(qū))。 (4) 在iostream中只對(duì)“”運(yùn)算符用于標(biāo)準(zhǔn)類(lèi)型數(shù)據(jù)的輸入輸出進(jìn)行了重載,但未對(duì)用戶聲明的類(lèi)型數(shù)據(jù)的輸入輸出進(jìn)行重載。,2. cerr流對(duì)象 cerr流對(duì)象是標(biāo)準(zhǔn)錯(cuò)誤流。cerr流已被指 14、定為與顯示器關(guān)聯(lián)。cerr的作用是向標(biāo)準(zhǔn)錯(cuò)誤設(shè)備(standard error device)輸出有關(guān)出錯(cuò)信息。cerr與標(biāo)準(zhǔn)輸出流cout的作用和用法差不多。但有一點(diǎn)不同: cout流通常是傳送到顯示器輸出,但也可以被重定向輸出到磁盤(pán)文件,而cerr流中的信息只能在顯示器輸出。當(dāng)調(diào)試程序時(shí),往往不希望程序運(yùn)行時(shí)的出錯(cuò)信息被送到其他文件,而要求在顯示器上及時(shí)輸出,這時(shí)應(yīng)該用cerr。cerr流中的信息是用戶根據(jù)需要指定的。,例13.1 有一元二次方程ax2+bx+c=0,其一般解為 x1,2=(-bb2-4ac)/2a,但若a=0,或b2-4ac #include using namespac
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版五上《小數(shù)乘整數(shù)》ppt課件
- 蘇教版一年級(jí)數(shù)學(xué)上冊(cè)《數(shù)一數(shù)》ppt課件
- 江南1優(yōu)秀課件
- 提高印字質(zhì)量課件
- 服務(wù)分銷(xiāo)策略課件
- 數(shù)學(xué)必修蘇教版互斥事件課件3(共32張PPT)
- 第三章要素費(fèi)用的核算PPT優(yōu)秀資料
- 元素的質(zhì)量分?jǐn)?shù)計(jì)算答案
- 圖形的欣賞與設(shè)計(jì)
- 八年級(jí)下期Uuit10SectionA課件
- 部編七年級(jí)語(yǔ)文下冊(cè)4孫權(quán)勸學(xué)課件
- 部編一年級(jí)語(yǔ)文下冊(cè)端午粽課件
- 超市防損的技能課件
- 表彰班會(huì)教學(xué)課件教學(xué)課件
- 第17講中考數(shù)學(xué)專題復(fù)習(xí) 函數(shù)的綜合應(yīng)用中考數(shù)學(xué)專題復(fù)習(xí)課件課件各版通用