正文 第十一章 再論C++的輸入_輸出(二)(1 / 3)

11.3操縱算子

一、使用操縱算子

Visual C++中還有另外一項很重要的部分,便是操縱算子。操縱算子不屬於任何類的成員,它們的定義在頭文件iostream.h與iomanip.h中。使用操縱算子,同樣可以對所有輸入/輸出數據流進行格式化控製。

flush用來將輸出緩衝區中的數據流強製輸出。例如,當我們執行語句Hello,Visual C++!”;時,由於cout屬於緩衝輸出,字符串信息並沒有立即顯示到屏幕上,而是先將輸出信息送進緩衝區。等到緩衝區堆滿信息後再一次把信息送給輸出設備。

1.endl和ends

endl是最常用的一個操縱算子,其作用是送出一個回車換行符到輸出流中,並產生強製發送輸出緩衝區中的數據流的動作,就如同C語言中的“

”。

2.setw(int)和setfill(int)

setw(M)用來設置域寬(數據流的寬度)6新的域寬由參數給出。

對輸出流而言,當數據寬度小字域寬時,剩餘空何由填充字符填充。若數據寬度大於域寬時,則數據仍然全部輸出,超出的部分不會被截斷。

對輸入流而言,當輸入數據的寬度大於域寬時,數據將被截斷。因此,使用setw(int)輸入數據,可以防止輸入過長的數據。注意,setw(int)隻對緊跟其後的第一個數據有效。

當使用setw(int)設置域寬時,輸毋數據流的剩餘空間將由setfiU(int)設置的字符來填充。

二、操縱算子與類

ios成員函數的比較許.多操縱算子的功能非常類似於先前討論類ios的成員函數(可能並不完全相同)。

具體說明:

1.操縱算子與類ios的成員函數在使用上不同。調用類ios的成員函數時,必須通過類的對象,一般是emit或cin。而使用操縱算子要通過輸入/輸出數據流。

上麵兩條語句分別便用了操縱算子和調用類ios的成員函數,但它們達到的效果是一樣的。

2.當這兩種方法都可以使用時,通常來說,使用操縱算子比調用類ios的成員函數更方便一些。

11.4用於輸出的運算符

當執行輸出操作時,可以看作向流中插入一個字符序列,因此,在流操作中將運算符C稱為插入符,輸出操作又可稱為插入操作。

一、預定義的插入類型

Visual C++在類ostream中預定義幾個進行輸出操作的重載函數operatorc(),其原型為:

ostream&operatorc(參數類型);

其中,參數類型隻限於C++內建的數據類型,包括有:

char(字符),int(整型),short(短整型),long(長整型)和它們的signed(有符號),unsigned(無符號)類型。

float(浮點型),double(雙精度型),longdouble(長雙精度型),char*(字符串)和void*(指針)類型。

對插入符《有如下說明:

1.當執行插入操作時,編譯器可以自動判別所要輸出的數據類型,無須用戶指明。但如果是用戶自定義的類型,則需要自己重載函數operators()。

2.由於operatorc()返回類型是對類ostream的引用,所以,可以在一條語句中連用多個插入符。

3.當要輸出一個char*類型的指針所保存的地址值時,應把它顯式地強製轉換成void*類型。

4.輸出一個地址時,缺省情況下(可以通過格式化輸入/輸出,控製輸出格式),這些地址值按十六進製的形式顯示。

5.除了利用operatorc()函數執行輸出操作,類ostream中還定義了一些其他的用於輸出的成員函數:

二、重載插入符

在通常情況下,使用插入符