面向?qū)ο蠹夹g(shù)課件第九章.ppt_第1頁
面向?qū)ο蠹夹g(shù)課件第九章.ppt_第2頁
面向?qū)ο蠹夹g(shù)課件第九章.ppt_第3頁
面向?qū)ο蠹夹g(shù)課件第九章.ppt_第4頁
面向?qū)ο蠹夹g(shù)課件第九章.ppt_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1 第九章C 的I O流類庫 計算機系 面向?qū)ο蟪绦蛟O(shè)計及C 2 主要內(nèi)容基本概念C 的流及流類庫用戶自定義類型的輸入 輸出文件的輸入 輸出應用舉例 3 基本概念流 與數(shù)據(jù)傳送有關(guān)系的事物叫做流 C 用流表示數(shù)據(jù)的傳輸操作 流總是與某一設(shè)備 如 鍵盤 屏幕 硬盤 軟盤等 相聯(lián)系 流類 C 為輸入 輸出定義了一組不同的類 包含要進行傳送的數(shù)據(jù)的結(jié)構(gòu) 屬性 特征和行為 都將其放在流庫中 叫做流類 流的對象 用流類聲明該流類的一個對象 代表某個輸入設(shè)備或輸出設(shè)備 并與具體的某個文件相聯(lián)系 叫做流的對象 輸入流 有一種流表示數(shù)據(jù)從某個載體或設(shè)備傳送到內(nèi)存緩沖區(qū)變量中 叫做輸入流 輸出流 有一種流表示數(shù)據(jù)從內(nèi)存送到某個載體或設(shè)備中 叫做輸出流 4 7 2C 的流及流類庫C 流庫 streamlibrary 用派生方法建立起來的一個輸入輸出類庫 它有兩個平行的基類 streambuf類和ios類 它們在iostream h中定義 是兩個非常低級的類 所有流類均以兩者之一作為其基類 一 streambuf類streambuf類主要負責緩沖區(qū)的處理 緩沖區(qū)由一字符序列和兩個指針 輸入緩沖區(qū)指針和輸出緩沖區(qū)指針 組成 這兩個指針指向字符要被插入或被取出的位置 streambuf類可以派生出三個類 filebuf類 strstreambuf類和conbuf類 5 它們的類等級如下 streambuffilebufstrstreambufconbuf二 ios類ios類及其派生類提供用戶使用流類的接口 提供了輸入和輸出所需要的公共操作 它支持對streambuf的緩沖區(qū)進行輸入輸出時的格式化或非格式化轉(zhuǎn)換 ios類有四個直接派生類 istream 輸入流 ostream 輸出流 fstreambase 文件流 strstreambase 串流 6 iosistreamostreamfstreambasestrstreambase以這四種基本的流類為基礎(chǔ) 可派生出多種實用的流類 iostream 輸入 輸出流 ifstream 輸入文件流 ofstream 輸出文件流 fstream 輸入 輸出文件流 在istream ostream和iostream類的基礎(chǔ)上分別重載運算符 就得到了istream withassign ostream withassign和iostream withassign類 類等級如下 7 當開始執(zhí)行C 程序時 C 會有幾個自動打開的預定義流 它們是 cin 與標準輸入設(shè)備相關(guān)的流 cout 與標準輸出設(shè)備相關(guān)的流 cerr和clog 與標準錯誤輸出設(shè)備相關(guān)的流 cerr和clog之間的區(qū)別是cerr沒有被緩沖 clog被緩沖 只有當緩沖區(qū)滿時 才進行輸出 這四個預定義的流在iostream h里被說明為withassign類的對象 externistream withassigncin 等價于stdinexternostream withassigncout 等價于stdoutexternostream withassigncerr 等價于stderrexternostream withassignclog 等價于帶緩沖的tderr可以用istream和ostream等類聲明自己的流對象 8 7 4用戶自定義類型的輸入 輸出一 重載輸出運算符 輸出運算符 也稱插入運算符 有兩個操作數(shù) 左操作數(shù)為ostream類類型的對象 右操作數(shù)可以是一個預定義類型的變量 也可以是重載了該運算符 的類的對象 重載運算符 的定義格式如下 ostream 一般采用友元函數(shù)形式重載 9 書中例7 7 p258 定義了二維坐標類coord 并通過友元函數(shù)重載了輸出運算符 定義格式如下 istream 一般采用友元函數(shù)形式重載 見例7 8 P260 10 7 5文件的輸入 輸出概述文件是具有相同類型的數(shù)據(jù)的任意序列 一般是指存放在外部介質(zhì)上的數(shù)據(jù)的集合 要對文件進行處理 必須首先建立一個文件 根據(jù)文件數(shù)據(jù)的組織形式 可將文件分為ASCII文件和二進制文件 ASCII文件也稱文本 text 文件 他們存放在介質(zhì)上的存儲形式和存儲過程是不一樣的 對文件的操作有兩種 一是向文件輸出數(shù)據(jù) 另一是從文件讀入數(shù)據(jù)到內(nèi)存 寫入到文件和從文件讀出的過程可分解為三個抽象的概念 往流中加入一個字符 從流中取出一個字符 一旦建立一個流 把它與文件相關(guān)連以便用來讀和寫 11 7 5 1文件打開與關(guān)閉在C 中 打開一個文件 就是將這個文件與一個流建立關(guān)聯(lián) 關(guān)閉一個文件 就是取消這種關(guān)聯(lián) C 有三種類型的文件流 輸入文件流ifstream 輸出文件流ofstream 輸入 輸出文件流fstream 類定義在fstream h中 1 打開文件要將文件輸入 輸出 首先必須打開文件 分三個步驟 1 在程序中要包含頭文件fstream h 2 建立流 定義流類的對象 ifstreamin 輸入流對象in 用于inputofstreamout 輸出流對象out 用于outputfstreamboth 輸入 輸出流對象both 用于inputandoutput 12 3 使用open 函數(shù) 將建立的流與文件相關(guān)連 open 函數(shù)的原型為 voidopen constchar filename intmode intaccess 其中filename用來傳遞文件名的 mode值決定文件的打開方式 其所能取的值是在iostream h中ios類的公有部分定義的枚舉值 enumopen mode in 0 x01out 0 x02ate 0 x04app 0 x08trunc 0 x10nocreate 0 x20noreplace 0 x40binary 0 x80 每個枚舉值的含義請見書中P262下半部分 第二個參數(shù)mode值有時也用缺省值 13 第三個參數(shù)值access是文件的保護方式 與操作系統(tǒng)有關(guān) 一般使用缺省值 打開文件的一般格式 定義流類的對象 流類對象 open 文件名 使用方式 訪問方式 或定義流類的對象 文件名 使用方式 訪問方式 例如 ofstreamout out open test ios out 0 如果未成功打開文件 則流變量的值為0 因此打開文件時 通常要判斷打開是否成功 2 關(guān)閉文件當結(jié)束一個文件的操作后 要及時關(guān)閉該文件 以防止它被誤用 ofstreamout test 關(guān)閉文件的一般格式為 流類對象 close 14 7 5 2文件的讀寫1 文本文件的讀寫操作方法 用輸入 輸出運算符 例7 9 P265 例7 10 P265 15 2 二進制文件讀寫操作由于此時讀寫的數(shù)據(jù)都是無意義的二進制字符 這時不能用 運算符來讀寫 方法有 1 使用put 和get 函數(shù) 例7 11 P266 2 使用read 函數(shù) 例7 12 P268和write 函數(shù) 例7 13 P268上面這4個函數(shù)也可以用于文本文件的讀寫 16 3 檢測文件結(jié)束可以使用eof 函數(shù)來檢測文件是否到達文件尾的標志位EOF該函數(shù)的原型是inteof 示例 ifstreamifs if ifs eof 尚未到達文件尾 或者可以檢查流對象是否為零 為零表示文件結(jié)束示例 ifstreamifs if ifs 尚未到達文件尾 17 4 隨機存取文件隨機存取文件可以根據(jù)需要訪問文件中的任一個元素 1 文件指針函數(shù)a seekg pos 在輸入流中從頭開始移動pos個字節(jié)文件讀指針seekp pos 在輸出流中從頭開始移動pos個字節(jié)文件寫指針b seekg pos origin seekp pos o

溫馨提示

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

最新文檔

評論

0/150

提交評論