亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:14:30
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了詳解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型占兩個字節。

 

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

編譯系統認為以上語句都是合法的,而不對數據類型的合法性進行檢查,顯然所得到的結果不是人們所期望的,在用scanf 輸入時,有時出現的問題是很隱蔽的。如:

 

 
  1. scanf("%d", &i); //正確,輸入一個整數,賦給整型變量i 
  2. 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++中,輸入輸出流被定義為類。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類庫中包含許多用于輸入輸出的 類。常用的見表

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

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

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。見圖

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

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

與iostream類庫有關的頭文件

iostream類庫中不同的類的聲明被放在不同的頭文件中,用戶在自己的程序中用#include命令包含了有關的頭文件就相當于在本程序中聲明了所需要用到的類??梢該Q —種說法:頭文件是程序與類庫的接口,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種流對象, 見表

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

在iostream頭文件中定義以上4個流對象用以下的形式(以cout為例):

 

 
  1. ostream cout ( stdout); 

在定義cout為ostream流類對象時,把標準輸出設備stdout作為參數,這樣它就與標準輸出設備(顯示器)聯系起來,如果有

 

  1. cout <<3; 

就會在顯示器的屏幕上輸出3。

在iostream頭文件中重載運算符

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

 

 
  1. #include <iostream> 

在istream和ostream類(這兩個類都是在iostream中聲明的)中分別有一組成員函數對位移運算符“<<”和“>>”進行重載,以便能用它輸入或輸出各種標準數據類型的數據。對于不同的標準數據類型要分別進行重載,如:

 

 
  1. ostream operator << (im ); //用于向輸出流插入一個int數據 
  2. ostream operator << (float ); //用于向輸出流插入一個float數據 
  3. ostream operator << (char); //用于向輸出流插入一個char數據 
  4. ostream operator << (char * ); //用于向輸出流插入一個字符串數據 

等。如果在程序中有下面的表達式:

 

 
  1. cout<<"C++"

實際上相當于:

 

 
  1. 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頭文件來解決,必須自己對“<<”和“>>”進行重載。

怎樣理解運算符“<<”和“>>”的作用呢?有一個簡單而形象的方法:它們指出了數據移動的方向,例如

 

 
  1. >>a 

箭頭方向表示把數據放人a中。而

 

 
  1. <<a 

箭頭方向表示從a中拿出數據。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久91精品国产一区不卡| 91国产美女视频| 日本精品久久中文字幕佐佐木| 亚洲高清在线观看| 91在线视频精品| 国产亚洲xxx| 国产精品高潮在线| 久久精品国产99国产精品澳门| 91久久久亚洲精品| 国产精品色午夜在线观看| 91在线精品播放| 91精品在线观| 国产精品7m视频| 狠狠躁18三区二区一区| 亚洲视屏在线播放| 日韩在线观看电影| 国产欧美一区二区三区在线| 国产精品成人aaaaa网站| 另类色图亚洲色图| 国产精品自拍小视频| 中文字幕自拍vr一区二区三区| 欧美日产国产成人免费图片| 欧美午夜片欧美片在线观看| 青青草一区二区| 欧美性在线观看| 亚洲欧洲成视频免费观看| 国产精品夜色7777狼人| 亚洲成人激情在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩av影视综合网| 亚洲欧洲激情在线| 亚洲国内精品在线| 欧美成人午夜剧场免费观看| 国产成人激情视频| 国产在线日韩在线| 日韩中文有码在线视频| 欧美激情三级免费| 亚洲三级黄色在线观看| 91久久久久久| 亚洲性视频网址| 欧洲午夜精品久久久| 97精品一区二区三区| 91视频免费网站| 国产91在线播放精品91| 久久精品一本久久99精品| 欧美极品少妇与黑人| 亚洲人成电影在线播放| 欧美最猛性xxxx| 亚洲欧美国产日韩中文字幕| 久久精品91久久久久久再现| 欧美性受xxx| 日韩中文字幕在线视频播放| 日本精品久久电影| 亚洲欧美www| 热久久这里只有精品| 久久久成人精品视频| 高清欧美性猛交xxxx| 欧美激情高清视频| 97碰碰碰免费色视频| 成人网在线免费看| 91老司机在线| 欧美视频裸体精品| 国产精品福利无圣光在线一区| 国产精品草莓在线免费观看| 555www成人网| 国产成人精品最新| 国产精品中文字幕在线观看| 久久久久久一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 精品性高朝久久久久久久| 国产精品午夜视频| 国产视频精品在线| 亚洲电影免费观看| 欧美视频第一页| 日韩在线视频国产| 国产一区二区久久精品| 久久久久久综合网天天| 欧美电影在线播放| 青青久久av北条麻妃黑人| 91免费国产视频| 性色av一区二区咪爱| 日韩av片免费在线观看| 亚洲人成网站在线播| 精品国产视频在线| 另类美女黄大片| 在线免费观看羞羞视频一区二区| 精品少妇一区二区30p| 91伊人影院在线播放| 丰满岳妇乱一区二区三区| 久久久999精品视频| 插插插亚洲综合网| 国产精品69精品一区二区三区| 日韩电影在线观看永久视频免费网站| 红桃av永久久久| 精品视频在线播放免| 中日韩美女免费视频网站在线观看| 日韩欧美视频一区二区三区| 九九热精品视频| 精品伊人久久97| 欧美日本啪啪无遮挡网站| 色妞久久福利网| 亚洲天堂av电影| 91欧美激情另类亚洲| 成年人精品视频| 欧美午夜性色大片在线观看| 亚洲色图日韩av| 欧美成人午夜影院| 午夜免费在线观看精品视频| 疯狂蹂躏欧美一区二区精品| 亚洲精品国产精品国自产在线| 欧美精品日韩www.p站| 中文字幕精品一区久久久久| 精品无人国产偷自产在线| 91精品国产高清久久久久久91| 日韩精品极品毛片系列视频| 国产剧情日韩欧美| 亚洲日本成人女熟在线观看| 午夜欧美不卡精品aaaaa| 欧美电影电视剧在线观看| 午夜免费日韩视频| 91精品国产综合久久香蕉的用户体验| 欧美自拍视频在线| 欧美丝袜一区二区| 欧美三级欧美成人高清www| 精品视频在线播放色网色视频| 亚洲图片欧美日产| 久久精品99久久久久久久久| 国产成人一区二区在线| 久久精品91久久香蕉加勒比| 日韩av在线免费观看| 在线午夜精品自拍| 久久久99久久精品女同性| 国产成人亚洲综合91精品| 一区二区三区动漫| 国产精品美女www爽爽爽视频| 成人黄色av网站| 亚洲曰本av电影| 亚洲人成在线免费观看| 国产精品久久久久免费a∨| 久久69精品久久久久久国产越南| 日韩亚洲成人av在线| 美女久久久久久久| 中文字幕亚洲综合| 欧美激情国产日韩精品一区18| 日韩欧美主播在线| 亚洲精品久久久久中文字幕欢迎你| 国产在线98福利播放视频| 亚洲福利视频免费观看| 国产精品 欧美在线| 日韩大胆人体377p| 欧美成人免费一级人片100| 久久伊人免费视频| 精品亚洲一区二区| 亚洲电影天堂av| 美日韩在线视频| 亚洲网站在线播放| 国产精品成熟老女人| 91久久在线播放| 亚洲无av在线中文字幕| 国产精品久久久久久久9999| 久久久成人精品| 亚洲人成电影网站色www| 久久精品99久久久久久久久| 久久精品亚洲一区|