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中還定義了一些其他的用於輸出的成員函數:
二、重載插入符
在通常情況下,使用插入符