10.1 c++流的概念
1 c+ +流的體系結構
要利用c+ +流,必須在程式中包含有關的標頭檔案,以便獲得相關流類的宣告。為了使用新標準的流,相關標頭檔案的檔名中不得有副檔名。與c+ +流有關的標頭檔案有:
iostream:要使用cin、cout的預定義流物件進行針對標準裝置的i/o操作,須包含此檔案。
fstream:要使用檔案流物件進行針對磁碟檔案的i/o,操作須包含此檔案。
strstream:要使用字串流物件進行針對記憶體字串空間的i/o操作,須包含此檔案。
iomanip:要使用setw、fixed等大多數操作符,須包含此檔案。
注意,為了使用新標準的c+ +流,還必須在程式檔案的開始部分插入下面這個名字空間宣告:
using namespace std;
2 預定義流物件
c+ +流有4 個預定義的流物件,它們的名稱及與之聯絡的i/o裝置如下:
cin 標準輸入
cout 標準輸出
cerr 標準出錯資訊輸出
clog 帶緩衝的標準出錯資訊輸出
3 提取運算子 和插入運算子
輸入流類istream過載了運算子 ,用於資料輸入,其原形具有
istream& operator ( istream&, 型別修飾 &); 的形式。過載的的功能是從輸入流中提取資料賦值給乙個變數,因此稱之為提取運算子(extractor)。當系統執行cin x操作時,將根據實參x的型別生成相應的提取運算子過載函式的例項並呼叫該函式,把x 引用傳送給對應的形參,接著從鍵盤的輸入 緩衝區中讀入乙個值並賦給x(因形參是x的引用)後,返回istream流,以便繼續使用提取運算子為下乙個變數輸入資料。
輸出流類ostream過載了運算子,用於資料輸出,其原形具有
ostream& operator (ostream&, 型別修飾 );
的形式。過載的 的功能是把表示式的值插入到輸出流中,因此稱之為插入運算子(inserter)。當系統執行cout x操作時,首先根據x值的型別呼叫相應的插入運算子過載函式,把x 的值傳送給對應的形參,接著執行函式體,把x 的值(亦即形參的值)輸出到顯示器螢幕上,在當前螢幕游標位置起顯示出來,然後返回ostream流,以便繼續使用插入運算子輸出下乙個表示式的值。
上面格式中的「型別修飾符」是指char、int、double、char*、bool等等c+ +中固有型別的修飾符。也就是說,只要輸入輸出的資料屬於這些c+ +固有型別中的一種,就可以直接使用 或 完成輸入輸出任務。在完成輸入輸出任務後, 和 把第一引數(即流物件的引用)返回,因此這兩個運算子可以連續使用,如cin a b c;等。
4 有格式輸入輸出和無格式輸入輸出
利用c+ +流既可進行有格式輸入輸出,也可進行無格式輸入輸出。
計算機所處理的資料都有內部儲存格式和外部表現形式的區分,因此在輸入輸出過程中必須進行適當的轉換,有格式輸入輸出就是完成這一任務的。有格式輸入輸出針對的是鍵盤、顯示器、印表機等字元裝置以及磁碟中的文字檔案。對於有格式輸入輸出,無論輸入輸出的資料是什麼資料型別,體現在外部裝置上都是字串行。
對於無格式輸入輸出,資料的內部儲存存格式與外部儲存格式完全相同,因此無格式輸入輸出只能針對磁碟檔案(或磁帶、光碟上的檔案),而且這樣的檔案通常不能用一般的文字編輯器檢視。進行無格式輸入輸出需呼叫流物件的專門的成員函式實現。
5 操作符
c+ +流提供了提取運算子 和插入運算子 ,使得輸入輸出的表達簡潔、形象、直觀,這最能體現c+ +流的風格。c+ +流還提供了很多輸入、輸出或控制輸入輸出的成員函式,須通過.或- 加以呼叫,不能與運算子 或 配合使用,因而與c+ +流的整體風格很不協調。為此,c+ +提供了一系列可與運算子 或 配合使用的特殊函式,稱為操作符(manipulator)。每個操作符都與乙個具體的函式相聯絡,使得 或 可間接地通過它們呼叫與之聯絡的函式,完成相應的輸入 、輸出功能或輸入輸出控制功能。前面經常用到的endl、setw等就是操作符。有了操作符,c+ +流操作在風格上就更加統一,輸入輸出操作也顯得更加流暢。
10.2 輸入輸出的格式控制
1 預設的輸入輸出格式
在沒有特地進行格式控制的情況下,輸入輸出採用預設格式。
(1)預設的輸入格式
c+ +流所識別的輸入資料的型別及其預設的輸入格式包括:
short、int、long(signed、unsigned):與整型常量同
float、double、long double:與浮點數常量同
char(signed、unsigned):第乙個非空白字元
char *(signed、unsigned):從第乙個非空白字元開始到下乙個空白字元結束
void*:無字首的16進製制數
bool:把true或1識別為true,其他的均識別為false(vc6.0中把0識別為false,其他的值均識別為true)
(2)預設的輸出格式
c+ +流所識別的輸出資料的型別及其預設的輸出格式包括:
char(signed、unsigned): 單個字元(無引號)
short、int、long(signed、unsigned):一般整數形式,負數前有-號
char *(signed、unsigned): 字串行(無引號)
float、double、long double:浮點格式或指數格式(科學表示法),取決於哪個更短
void *: 無字首的16進製制數
bool: 1或0
2.格式標誌與格式控制
在作為流庫根類的ios_base中,有乙個作為資料成員的格式控制變數,專門用來記錄格式標誌;通過設定標誌,可以有意識地對有格式輸入輸出的效果加以控制。各種格式標誌被定義為一組符號常量。
這些作為格式標誌的常量與整數的對應關係是精心安排的,每乙個標誌對應乙個二進位制位,為1時表示對應標誌已設定,為0時表示對應標誌未設定。這些作為標誌的二進位制位儲存在格式控制變數的低端的若干位中,每乙個流物件都有這樣乙個作為資料成員的格式控制變數。在外部使用這些格式標誌時,必須在標誌前加上ios_base::修飾。
格式標誌中的有些關係密切的相鄰標誌被規定為域,一共有三個:由left、right和 internal組成的域稱為adjustfield(對齊方式域);由dec、oct和hex組成的域稱為basefield(數制方式域);由scientific和fixed組成的域稱為floatfield(浮點方式域)。adjustfield、basefield和floatfield也是在ios_base中定義的,因此在外部使用時也必須加上域修飾字首ios_base::(如ios_base::adjustfield)。
2023年計算機二級C 考點解析 模板
9.1 函式模板 1 函式模板的概念 定義與應用 template 模板形參表宣告 函式宣告 其中的 模板形參表宣告 是由乙個或多個 模板形參 組成 如果是多個,需要用逗號隔開 每個 模板形參 具有下面幾種形式 1 typename 引數名 2 class 引數名 3 型別修飾 引數名 這裡的 引數...
2023年計算機二級C語言考點解析 檔案
16.1 檔案型別指標 file型別指標 c語言中的檔案分緩衝型檔案和非緩衝型檔案兩種,此處只討論緩衝型檔案。對於緩衝型檔案,每個被使用的檔案都在記憶體中開闢乙個區,用來存放檔案的有關資訊 如檔案名字 檔案狀態及檔案當前位置等 這些資訊儲存在有關結構體型別的變數中。該結構體型別由系統定義,取名為fi...
2023年計算機二級C語言考點解析 運算
15.1 位運算的含義及應用 1.位的概念 大多數計算機系統的記憶體儲器是由眾多的儲存單元構成的。在微機中,每個儲存單元是1個位元組,它由8位二進位制數構成,可以表示28 256種資訊,各位的編號從0 7,最左邊的位 第7位 是最高位,最右邊的位 第0位 是最低位。由於二進位制本身的特點,各位上的數...