网站大量收购独家精品文档,联系QQ:2885784924

输出串流的格式控制.PPT

  1. 1、本文档共127页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
输出串流的格式控制

第 14 章 輸出與輸入 本章提要 14-1 甚麼是串流? 14-2 認識 C++ 串流類別庫 14-3 輸出與輸入的控制 14-4 檔案串流 14-5 綜合演練 14-1 甚麼是串流? 串流 (Stream) 就是資料流通的管道, 它就像是一個封閉的通道一樣, 有個起點和終點, 而資料則是由起點流經通道而傳至終點, 其關係如下圖所示: 當起點送出資料時, 就將資料加進 (Insert) 串流中, 而終點則會由串流中取出 (Extract) 資料來加以處理。 甚麼是串流? 有些串流本身具有緩衝區 (Buffer), 可以將送入的資料暫存起來, 直到緩衝區滿了、或收到某些控制字元 (如換行或檔案結束符號)、或當我們下達強制送出的命令時, 才一次將所有資料送給終點。另外, 串流也可以做一些格式化 (例如將數值轉為文字) 或過濾 (例如跳過空白字元) 的工作, 以減輕程式設計者的負擔。 甚麼是串流? 每一種串流類別可代表一種輸出、入的設備。在做輸出時, 起點就是變數 (或資料), 而終點則是串流類別的物件 (例如標準輸出)。我們也已學過, 多個起點可以用 串接起來, 例如: 甚麼是串流? 在做輸入時, 則起點是串流類別的物件 (如鍵盤、檔案等輸入), 而終點則是變數 (或物件)。各接收端也可以用 串接起來, 以鍵盤輸入為例來說明: 甚麼是串流? 我們可以把 和 想成是資料流動的方向, 就是向左流入串流物件中, 而 則是向右流入變數內。 所有的基本資料型別, 包括 char* (視為字串) 在內, 及以大多數 C++ 類別庫中的類別均可直接用 C++ 的串流做輸入或輸出。但自定的類別則必須多載 及 運算子、或是定義將類別轉換成基本型別的函式, 才可以使用串流功 能 14-2 認識 C++ 串流類別庫 串流類別庫 內建的串流物件 轉向對標準輸出入的影響 串流類別庫 在 C++ 串流類別庫中有許多的類別及樣版, 在此我們簡單認識一下其中的重要類別。在這些串流類別中, 最上層的基礎類別就是 ios_base, 此類別定義了輸出入串流所共有的基本屬性及行為;接著由 ios_base 衍生出一 個 basic_ios 樣版, 其繼承架構如下: 串流類別庫 串流類別庫 basic_istream 和 basic_ostream 都是以虛擬繼承的方式由 basic_ios 所衍生出的樣板, 在標準類別庫中就用它們分別建立了輸入串流類別 istream 及輸出串流類別 ostream, 我們常用的標準輸入及輸出物件 cin 及 cout 就是由這兩個類別產生的。basic_iostream 樣版則是多重繼承 basic_istream 及 basic_ostream, 可用以產生同時可做輸入或輸出的類別 (例如檔案就可做為輸入的來源或輸出的目的)。 串流類別庫 不過除非是有特殊的需要, 否則一般不需自行由這些樣板產生新的類別來使用, 而可直接使用標準類別庫中已定義好的類別 (例如 istream 和 ostream), 更簡單一點, 則是直接使用已事先產生的內建物件來進行輸入與輸出。 內建的串流物件 我們慣用的 cin 、cout 只是內建串流物件的四分之一, 在 C++ 類別庫中預先建立的串流物件共有 8 個, 可分為 4 組, 這些物件的功能及所屬的類別如下表所示:(如下頁) 其中標準輸入裝置預設為鍵盤, 而標準輸出、標準錯誤、標準記錄則預設都是螢幕。 cin、cout 等都是代表這些標準裝置的物件, 因此我們可直接用它們來進行輸入與輸出。 內建的串流物件 內建的串流物件 以 w 開頭的類別即為使用前述的樣版產生類別時, 指定了以 wchar_t 為處理的資料型別, 換言之就是適用於 wchar_t 型別資料的輸入與輸出。然而實際上要使用這些 wxxx 的串流物件並不如 cin、cout 方便, 因為各系統實作國際化字集的方式並不相同, 甚至各家編譯器實作的方式都不同。例如在 Windows XP 上若要以 wcout 輸出雙位元組的中文字, 還需先呼叫 ios_base::imbue() 成員函式修改所用的語系, 請參考以下的例子: 內建的串流物件 內建的串流物件 如範例所示, 在第 6、11、13 行都要個別用 wcout、wcerr、wclog 物件呼叫 imbue() 來修改所用的語系, 才能用該串流物件輸出中文。若刪除這幾行敘述, 則在輸出時, 各串流物件會將程式中所要輸出的字串視為有錯誤, 而不輸出, 所以在螢幕上就看不到輸出結果。至於 imbue()、locale() 等函式的功用及意涵, 限於篇幅, 在此就不說明。 內建的串流物件 第 7、12、14 行的字面常數字串前面所加的大寫 L 表示其後的文字為 w

文档评论(0)

fengruiling + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档