程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> 與C++輸入輸出有關的類和對象

與C++輸入輸出有關的類和對象

編輯:C++基礎知識
輸入和輸出是數據傳送的過程,數據如流水一樣從一處流向另一處。C++形象地將此過程稱為流(Stream)。C++的輸入輸出流是指由若干字節組成的宇節序列,這些宇節中的數據按順序從一個對象傳送到另一對象。流表示了信息從源到目的端的流動。在輸入操作時,字節流從輸入設備(如鍵盤、磁盤)流向內存,在輸出操作時,字節流從內存流向輸出設備(如屏幕、打印機、磁盤等)。流中的內容可以是ASCII字符、二進制形式的數據、圖形圖像、數字音頻視頻或其他形式的信息。

實際上,在內存中為每一個數據流開辟一個內存緩沖區,用來存放流中的數據。當用cout和插入運算符“<<”向顯示器輸出數據時,先將這些數據送到程序中的輸出緩沖區保存,直到緩沖區滿了或遇到endl,就將緩沖區中的全部數據送到顯示器顯示出來。在輸入時,從鍵盤輸入的數據先放在鍵盤的緩沖區中,當按回車鍵時,鍵盤緩沖區中的數據輸入到程序中的輸入緩沖區,形成cin流,然後用提取運算符“ >>”從輸入緩沖區中提取數據送給程序中的有關變量。總之,流是與內存緩沖區相對應的,或者說,緩沖區中的數據就是流。

在C++中,輸入輸出流被定義為類。C++的I/O庫中的類稱為流類(stream class)。 用流類定義的對象稱為流對象。

其實,cout和cin並不是C++語言中提供的語句,它們是iostream類的對象,在不了解類和對象時,在不致引起誤解的前提下,為敘述方便,把它們稱為cout語句和cin語句。正如C++並未提供賦值語句,只提供賦值表達式,在賦值表達式後面加分號就成了C++的語句,為方便起見,我們習慣稱之為賦值語句。又如,在C語言中常用 printf和scanf進行輸出和輸入,printf和scanf是C語言庫函數中的輸入輸出函數,一般也習慣地將由printf和scanf函數構成的語句稱為printf語句和scanf語句。在使用它們時,對其本來的概念應該有准確的理解。

了解了類和對象後,我們對C++的輸入輸出應當有更深刻的認識。

C++編譯系統提供了用於輸入輸出的iostream類庫。iostream這個單詞是由3個部 分組成的,即i-o-stream,意為輸入輸出流。在iostream類庫中包含許多用於輸入輸出的 類。常用的見表13.1。


圖 13.1
表13.1 I/O類庫中的常用流類 類名 作用 在哪個頭文件中聲明 ios 抽象基類 iostream istream
ostream
iostream 通用輸入流和其他輸入流的基類
通用輸出流和其他輸出流的基類
通用輸入輸出流和其他輸入輸出流的基類 iostream
iostream
iostream ifstream
ofstream
fstream 輸入文件流類
輸出文件流類
輸入輸出文件流類 fstream
fstream
fstream istrstream
ostrstream
strstream 輸入字符串流類
輸出字符串流類
輸入輸出字符串流類 strstream
strstream
strstream
ios是抽象基類,由它派生出istream類和ostream類,兩個類名中第1個字母i和o分別代表輸入(input)和輸出(output)。istream類支持輸入操作,ostream類支持輸出操作, iostream類支持輸入輸出操作。iostream類是從istream類和ostream類通過多重繼承而派生的類。其繼承層次見圖13.1表示。

C++對文件的輸入輸出需要用ifstrcam和ofstream類,兩個類名中第1個字母i和o分別代表輸入和輸出,第2個字母f代表文件(file)。ifstream支持對文件的輸入操作, ofstream支持對文件的輸出操作。類ifstream繼承了類istream,類ofstream繼承了類ostream,類fstream繼承了類iostream。見圖 13.2。


圖 13.2
I/O類庫中還有其他一些類,但是對於一般用戶來說,以上這些已能滿足需要了。如果想深入了解類庫的內容和使用,可參閱所用的C++系統的類庫手冊。

與iostream類庫有關的頭文件

iostream類庫中不同的類的聲明被放在不同的頭文件中,用戶在自己的程序中用#include命令包含了有關的頭文件就相當於在本程序中聲明了所需要用到的類。可以換 —種說法:頭文件是程序與類庫的接口,iostream類庫的接口分別由不同的頭文件來實現。常用的有
  • iostream  包含了對輸入輸出流進行操作所需的基本信息。
  • fstream  用於用戶管理的文件的I/O操作。
  • strstream  用於字符串流I/O。
  • stdiostream  用於混合使用C和C + +的I/O機制時,例如想將C程序轉變為C++程序。
  • iomanip  在使用格式化I/O時應包含此頭文件。

在iostream頭文件中定義的流對象

在 iostream 頭文件中定義的類有 ios,istream,ostream,iostream,istream _withassign, ostream_withassign,iostream_withassign 等。

iostream.h包含了對輸入輸出流進行操作所需的基本信息。因此大多數C++程序都包括iostream.h。在iostream.h頭文件中不僅定義了有關的類,還定義了4種流對象, 見表13.2。

表13.2 文件中定義的4種流對象 對象 含義 對應設備 對應的類 c語言中相應的標准文件 cin 標准輸入流 鍵盤 istream_withassign stdin cout 標准輸出流 屏幕 ostream_withassign stdout cerr 標准錯誤流 屏幕 ostream_withassign stderr clog 標准錯誤流 屏幕 ostream_withassign stderr
在iostream頭文件中定義以上4個流對象用以下的形式(以cout為例):
    ostream cout ( stdout);
在定義cout為ostream流類對象時,把標准輸出設備stdout作為參數,這樣它就與標准輸出設備(顯示器)聯系起來,如果有
    cout <<3;
就會在顯示器的屏幕上輸出3。

在iostream頭文件中重載運算符

“<<”和“>>”本來在C++中是被定義為左位移運算符和右位移運算符的,由於在iostream頭文件中對它們進行了重載,使它們能用作標准類型數據的輸入和輸出運算符。所以,在用它們的程序中必須用#include命令把iostream包含到程序中。
    #include <iostream>

在istream和ostream類(這兩個類都是在iostream中聲明的)中分別有一組成員函數對位移運算符“<<”和“>>”進行重載,以便能用它輸入或輸出各種標准數據類型的數據。對於不同的標准數據類型要分別進行重載,如:
    ostream operator << (im );  //用於向輸出流插入一個int數據
    ostream operator << (float );  //用於向輸出流插入一個float數據
    ostream operator << (char);  //用於向輸出流插入一個char數據
    ostream operator << (char * );  //用於向輸出流插入一個字符串數據
等。如果在程序中有下面的表達式:
    cout<<"C++";
實際上相當於:
    cout.operator <<("C++")

"C ++"的值是其首字節地址,是字符型指針(char * )類型,因此選擇調用上面最後一個運算符重載函數,通過重載函數的函數體,將字符串插入到cout流中,函數返回流對象cout。

在istream類中已將運算符“>> ”重載為對以下標准類型的提取運算符:char, signed char, unsigned char, short, unsigned short, int, unsigned int,long, unsigned long, float, double, long double, char * , signed char *, unsigned char * 等。

在ostream類中將“<<”重載為插入運算符,其適用類型除了以上的標准類型外,還增加了一個 void * 類型。

如果想將“<<”和“>>”用於自己聲明的類型的數據,就不能簡單地采用包含 iostream頭文件來解決,必須自己對“<<”和“>>”進行重載。

怎樣理解運算符“<<”和“>>”的作用呢?有一個簡單而形象的方法:它們指出了數據移動的方向,例如
    >>a
箭頭方向表示把數據放人a中。而
    <<a
箭頭方向表示從a中拿出數據。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved