C++流的基本概念
在C++語言中,數據的輸入和輸出(簡寫為I/O)包括對標準輸入設備鍵盤和標準輸出設備顯示器、對在外存磁盤上的文件和對內存中指定的字符串存儲空間(當然可用該空間存儲任何信息)進行輸入輸出這三個方面。對標準輸入設備和標準輸出設備的輸入輸出簡稱為標準I/O,對在外存磁盤上文件的輸入輸出簡稱為文件I/O,對內存中指定的字符串存儲空間的輸入輸出簡稱為串I/O。
C++語言系統為實現數據的輸入和輸出定義了一個龐大的類庫,它包括的類主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream等,其中ios為根基類,其余都是它的直接或間接派生類。
ios為根基類,它直接派生四個類:輸入流類istream、輸出流類ostream、文件流基類fstreambase和字符串流基類strstreambase,輸入文件流類同時繼承了輸入流類和文件流基類(當然對于根基類是間接繼承),輸出文件流類ofstream同時繼承了輸出流類和文件流基類,輸入字符串流類istrstream同時繼承了輸入流類和字符串流基類,輸出字符串流類ostrstream同時繼承了輸出流類和字符串流基類,輸入輸出流類iostream同時繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時繼承了輸入輸出流類和文件流基類,輸入輸出字符串流類strstream同時繼承了輸入輸出流類和字符串流基類。
“流”就是“流動”,是物質從一處向另一處流動的過程。C++流是指信息從外部輸入設備(如鍵盤和磁盤)向計算機內部(即內存)輸入和從內存向外部輸出設備(如顯示器和磁盤)輸出的過程,這種輸入輸出過程被形象地比喻為“流”。為了實現信息的內外流動,C++系統定義了I/O類庫,其中的每一個類都稱作相應的流或流類,用以完成某一方面的功能。根據一個流類定義的對象也時常被稱為流。如根據文件流類fstream定義的一個對象fio,可稱作為fio流或fio文件流,用它可以同磁盤上一個文件相聯系,實現對該文件的輸入和輸出,fio就等同于與之相聯系的文件。
C++系統中的I/O類庫,其所有類被包含在iostream.h,fstream.h和strstrea.h這三個系統頭文件中,各頭文件包含的類如下:
iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。
fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h中的所有類。
Strstrea.h包含有:strstream, istrstream, ostrstream和strstreambase,以及iostream.h中的所有類。
在一個程序或一個編譯單元(即一個程序文件)中當需要進行標準I/O操作時,則必須包含頭文件iostream.h,當需要進行文件I/O操作時,則必須包含頭文件fstream.h,同樣,當需要進行串I/O操作時,則必須包含頭文件strstrea.h。在一個程序或編譯單元中包含一個頭文件的命令格式為“#include<頭文件名>”,當然若頭文件是用戶建立的,則頭文件名的兩側不是使用尖括號,而是使用雙引號。當系統編譯一個C++文件對#include命令進行處理時,是把該命令中指定的文件中的全部內容嵌入到該命令的位置,然后再編譯整個C++文件生成相應的目標代碼文件。
C++不僅定義有現成的I/O類庫供用戶使用,而且還為用戶進行標準I/O操作定義了四個類對象,它們分別是cin,cout,cerr和clog,其中cin為istream_withassign流類的對象,代表標準輸入設備鍵盤,也稱為cin流或標準輸入流,后三個為ostream_withassign流類的對象,cout代表標準輸出設備顯示器,也稱為cout流或標準輸出流,cerr和clog含義相同,均代表錯誤信息輸出設備顯示器。因此當進行鍵盤輸入時使用cin流,當進行顯示器輸出時使用cout流,當進行錯誤信息輸出時使用cerr或clog。
在istream輸入流類中定義有對右移操作符>>重載的一組公用成員函數,函數的具體聲明格式為:
istream& operator>>(簡單類型標識符&);
簡單類型標識符可以為char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的任何一種,對于每一種類型都對應著一個右移操作符重載函數。由于右移操作符重載用于給變量輸入數據的操作,所以又稱為提取操作符,即從流中提取出數據賦給變量。
當系統執行cin>>x操作時,將根據實參x的類型調用相應的提取操作符重載函數,把x引用傳送給對應的形參,接著從鍵盤的輸入中讀入一個值并賦給x(因形參是x的別名)后,返回cin流,以便繼續使用提取操作符為下一個變量輸入數據。
當從鍵盤上輸入數據時,只有當輸入完數據并按下回車鍵后,系統才把該行數據存入到鍵盤緩沖區,供cin流順序讀取給變量。還有,從鍵盤上輸入的每個數據之間必須用空格或回車符分開,因為cin為一個變量讀入數據時是以空格或回車符作為其結束標志的。
當cin>>x操作中的x為字符指針類型時,則要求從鍵盤的輸入中讀取一個字符串,并把它賦值給x所指向的存儲空間中,若x沒有事先指向一個允許寫入信息的存儲空間,則無法完成輸入操作。另外從鍵盤上輸入的字符串,其兩邊不能帶有雙引號定界符,若帶有只作為雙引號字符看待。對于輸入的字符也是如此,不能帶有單引號定界符。
在ostream輸出流類中定義有對左移操作符<<重載的一組公用成員函數,函數的具體聲明格式為:
ostream& operator<<(簡單類型標識符);
簡單類型標識符除了與在istream流類中聲明右移操作符重載函數給出的所有簡單類型標識符相同以外,還增加一個void* 類型,用于輸出任何指針(但不能是字符指針,因為它將被作為字符串處理,即輸出所指向存儲空間中保存的一個字符串)的值。由于左移操作符重載用于向流中輸出表達式的值,所以又稱為插入操作符。如當輸出流是cout時,則就把表達式的值插入到顯示器上,即輸出到顯示器顯示出來。
當系統執行cout<操作時,首先根據X值的類型調用相應的插入操作符重載函數,把X的值按值傳送給對應的形參,接著執行函數體,把X的值(亦即形參的值)輸出到顯示器屏幕上,從當前屏幕光標位置起顯示出來,然后返回COUT流,以便繼續使用插入操作符輸出下一個表達式的值。當使用插入操作符向一個流輸出一個值后,再輸出下一個值時將被緊接著放在上一個值的后面,所以為了讓流中前后兩個值分開,可以在輸出一個值之后接著輸出一個空格,或一個換行符,或其他所需要的字符或字符串。
C++語言系統為實現數據的輸入和輸出定義了一個龐大的類庫,它包括的類主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream等,其中ios為根基類,其余都是它的直接或間接派生類。
ios為根基類,它直接派生四個類:輸入流類istream、輸出流類ostream、文件流基類fstreambase和字符串流基類strstreambase,輸入文件流類同時繼承了輸入流類和文件流基類(當然對于根基類是間接繼承),輸出文件流類ofstream同時繼承了輸出流類和文件流基類,輸入字符串流類istrstream同時繼承了輸入流類和字符串流基類,輸出字符串流類ostrstream同時繼承了輸出流類和字符串流基類,輸入輸出流類iostream同時繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時繼承了輸入輸出流類和文件流基類,輸入輸出字符串流類strstream同時繼承了輸入輸出流類和字符串流基類。
“流”就是“流動”,是物質從一處向另一處流動的過程。C++流是指信息從外部輸入設備(如鍵盤和磁盤)向計算機內部(即內存)輸入和從內存向外部輸出設備(如顯示器和磁盤)輸出的過程,這種輸入輸出過程被形象地比喻為“流”。為了實現信息的內外流動,C++系統定義了I/O類庫,其中的每一個類都稱作相應的流或流類,用以完成某一方面的功能。根據一個流類定義的對象也時常被稱為流。如根據文件流類fstream定義的一個對象fio,可稱作為fio流或fio文件流,用它可以同磁盤上一個文件相聯系,實現對該文件的輸入和輸出,fio就等同于與之相聯系的文件。
C++系統中的I/O類庫,其所有類被包含在iostream.h,fstream.h和strstrea.h這三個系統頭文件中,各頭文件包含的類如下:
iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。
fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h中的所有類。
Strstrea.h包含有:strstream, istrstream, ostrstream和strstreambase,以及iostream.h中的所有類。
在一個程序或一個編譯單元(即一個程序文件)中當需要進行標準I/O操作時,則必須包含頭文件iostream.h,當需要進行文件I/O操作時,則必須包含頭文件fstream.h,同樣,當需要進行串I/O操作時,則必須包含頭文件strstrea.h。在一個程序或編譯單元中包含一個頭文件的命令格式為“#include<頭文件名>”,當然若頭文件是用戶建立的,則頭文件名的兩側不是使用尖括號,而是使用雙引號。當系統編譯一個C++文件對#include命令進行處理時,是把該命令中指定的文件中的全部內容嵌入到該命令的位置,然后再編譯整個C++文件生成相應的目標代碼文件。
C++不僅定義有現成的I/O類庫供用戶使用,而且還為用戶進行標準I/O操作定義了四個類對象,它們分別是cin,cout,cerr和clog,其中cin為istream_withassign流類的對象,代表標準輸入設備鍵盤,也稱為cin流或標準輸入流,后三個為ostream_withassign流類的對象,cout代表標準輸出設備顯示器,也稱為cout流或標準輸出流,cerr和clog含義相同,均代表錯誤信息輸出設備顯示器。因此當進行鍵盤輸入時使用cin流,當進行顯示器輸出時使用cout流,當進行錯誤信息輸出時使用cerr或clog。
在istream輸入流類中定義有對右移操作符>>重載的一組公用成員函數,函數的具體聲明格式為:
istream& operator>>(簡單類型標識符&);
簡單類型標識符可以為char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的任何一種,對于每一種類型都對應著一個右移操作符重載函數。由于右移操作符重載用于給變量輸入數據的操作,所以又稱為提取操作符,即從流中提取出數據賦給變量。
當系統執行cin>>x操作時,將根據實參x的類型調用相應的提取操作符重載函數,把x引用傳送給對應的形參,接著從鍵盤的輸入中讀入一個值并賦給x(因形參是x的別名)后,返回cin流,以便繼續使用提取操作符為下一個變量輸入數據。
當從鍵盤上輸入數據時,只有當輸入完數據并按下回車鍵后,系統才把該行數據存入到鍵盤緩沖區,供cin流順序讀取給變量。還有,從鍵盤上輸入的每個數據之間必須用空格或回車符分開,因為cin為一個變量讀入數據時是以空格或回車符作為其結束標志的。
當cin>>x操作中的x為字符指針類型時,則要求從鍵盤的輸入中讀取一個字符串,并把它賦值給x所指向的存儲空間中,若x沒有事先指向一個允許寫入信息的存儲空間,則無法完成輸入操作。另外從鍵盤上輸入的字符串,其兩邊不能帶有雙引號定界符,若帶有只作為雙引號字符看待。對于輸入的字符也是如此,不能帶有單引號定界符。
在ostream輸出流類中定義有對左移操作符<<重載的一組公用成員函數,函數的具體聲明格式為:
ostream& operator<<(簡單類型標識符);
簡單類型標識符除了與在istream流類中聲明右移操作符重載函數給出的所有簡單類型標識符相同以外,還增加一個void* 類型,用于輸出任何指針(但不能是字符指針,因為它將被作為字符串處理,即輸出所指向存儲空間中保存的一個字符串)的值。由于左移操作符重載用于向流中輸出表達式的值,所以又稱為插入操作符。如當輸出流是cout時,則就把表達式的值插入到顯示器上,即輸出到顯示器顯示出來。
當系統執行cout<操作時,首先根據X值的類型調用相應的插入操作符重載函數,把X的值按值傳送給對應的形參,接著執行函數體,把X的值(亦即形參的值)輸出到顯示器屏幕上,從當前屏幕光標位置起顯示出來,然后返回COUT流,以便繼續使用插入操作符輸出下一個表達式的值。當使用插入操作符向一個流輸出一個值后,再輸出下一個值時將被緊接著放在上一個值的后面,所以為了讓流中前后兩個值分開,可以在輸出一個值之后接著輸出一個空格,或一個換行符,或其他所需要的字符或字符串。
總結
- 上一篇: 遍历map集合常用的4种方式
- 下一篇: 如何用计算机放出音乐,如何录制电脑内部播