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

詳解C++編程中的輸出輸相干的類和對象

編輯:關於C++

詳解C++編程中的輸出輸相干的類和對象。本站提示廣大學習愛好者:(詳解C++編程中的輸出輸相干的類和對象)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++編程中的輸出輸相干的類和對象正文


C++輸出和輸入的概念
我們常常用到的輸出和輸入,都是以終端為對象的,即從鍵盤輸出數據,運轉成果輸入到顯示器屏幕上。從操作體系的角度看,每個與主機相連的輸出輸入裝備都被看做一個文件。除以終端為對象停止輸出和輸入外,還常常用磁盤(光盤)作為輸出輸入對象,磁盤文件既可以作為輸出文件,也能夠作為輸入文件。

法式的輸出指的是從輸出文件將數據傳送給法式,法式的輸入指的是從法式將數據傳送給輸入文件。

C++輸出輸入包括以下三個方面的內容:
對體系指定的尺度裝備的輸出和輸入。即從鍵盤輸出數據,輸入到顯示器屏幕。這類輸出輸入稱為尺度的輸出輸入,簡稱尺度I/O。
之外存磁盤文件為對象停止輸出和輸入,即從磁盤文件輸出數據,數據輸入到磁盤文件。之外存文件為對象的輸出輸入稱為文件的輸出輸入,簡稱文件I/O。
對內存中指定的空間停止輸出和輸入。平日指定一個字符數組作為存儲空間(現實上可以應用該空間存儲任何信息)。這類輸出和輸入稱為字符串輸出輸入,簡稱串I/O。

C++采用分歧的辦法來完成以上種輸出輸入。為了完成數據的有用活動,C++體系供給了宏大的I/O類庫,挪用分歧的類去完成分歧的功效。

在C說話中,用printf和scanf停止輸出輸入,常常不克不及包管所輸出輸入的數據是靠得住的平安的。在C++的輸出輸入中,編譯體系對數據類型停止嚴厲的檢討,但凡類型不准確的數據都弗成能經由過程編譯。是以C++的I/O操作是類型平安(type safe)的。C++的I/O操作是可擴大的,不只可以用來輸出輸入尺度類型的數據,也能夠用於用戶自界說類型的數據。C++對尺度類型的數據和對用戶聲明類型數據的輸出輸入,采取異樣的辦法處置。C++經由過程I/O類庫來完成豐碩的I/O功效。C++的輸出輸入優於C說話中的printf和scanf,然則比擬龐雜,要控制很多細節。
C++的I/O對C的成長--類型平安和可擴大性

在C說話中,用primf和scanf停止輸人輸入,常常不克不及包管所輸出輸入的數據是靠得住的、平安的。學過C說話的讀者可以剖析上面的用法,想用格局符%d輸入一個整數, 但不當心用它輸入了單精度變量和字符串,會湧現甚麼情形?假定所用的體系int型占兩個字節。

  printf("%d", i); // i為整型變量,准確,輸入i的值
  printf("%d", f); // f為單精度變量,輸入f變量中前兩個字節的內容
  printf("%d", "C++"); //輸入宇符串"C++"的地址

編譯體系以為以上語句都是正當的,而纰謬數據類型的正當性停止檢討,明顯所獲得的成果不是人們所希冀的,在用scanf 輸出時,有時湧現的成績是很隱藏的。如:

  scanf("%d", &i); //准確,輸出一個整數,賦給整型變量i
  scanf("%d", i); //漏寫&

假設已有聲明語句“int i = 1; ”,界說i為整型變量,其初值為1。編譯體系不以為下面的scanf語句失足,而是將輸人的值寄存到地址為000001的內存單位中,這個毛病能夠發生嚴重的效果。

C++為了與C兼容,保存了用printf和scanf停止輸入和輸人的辦法,以便使曩昔所編寫的年夜量的C法式依然可以在C ++的情況下運轉,然則願望讀者在編寫新的C ++程 序時不要用C的輸出輸入機制,而要用C++本身獨有的輸人輸入辦法。在C++的輸出輸入中,編譯體系對數據類型停止嚴厲的檢討,但凡類型不准確的數據都弗成能經由過程編譯。是以C++的I/O操作是類型平安(type safe)的。

另外,用printf和scanf可以輸入和輸出尺度類型的數據(如int、float、double、char), 但沒法輸入用戶本身聲明的類型(如數組、構造體、類)的數據。在C++中,會常常碰到對類對象的輸人輸入,明顯沒法應用printf和scanf來處置。C++的I/O操作是可擴大 的,不只可以用來輸人輸入尺度類型的數據,也能夠用於用戶自界說類型的數據。C++對尺度類型的數據和對用戶聲明類型數據的輸人輸入,采取異樣的辦法處置。明顯,在用戶聲清楚明了一個新類後,是沒法用printf和scanf 函數直接輸入和輸人這個類的對象的。

可擴大性是C++輸人輸入的主要特色之一,它能進步軟件的重用性,加速軟件的開 發進程。

C++經由過程I/O類庫來完成豐碩的I/O功效。如許使C++的輸人輸入顯著地優於C 說話中的printf和scanf,然則也為之支付了價值,C++的I/O體系變得比擬龐雜,要控制很多細節。在本章中只能引見其根本的概念和根本的操作,有些詳細的細節可在往後現實深刻運用時再進一步控制。

與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類庫中包括很多用於輸出輸入的 類。經常使用的見表


ios是籠統基類,由它派生出istream類和ostream類,兩個類名中第1個字母i和o分離代表輸出(input)和輸入(output)。istream類支撐輸出操作,ostream類支撐輸入操作, iostream類支撐輸出輸入操作。iostream類是從istream類和ostream類經由過程多重繼續而派生的類。

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

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種流對象, 見表

在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