最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++編程中的輸入輸相關(guān)的類和對象

 更新時間:2015年09月23日 17:02:37   投稿:goldensun  
這篇文章主要介紹了詳解C++編程中的輸入輸相關(guān)的類和對象,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++輸入和輸出的概念
我們經(jīng)常用到的輸入和輸出,都是以終端為對象的,即從鍵盤輸入數(shù)據(jù),運行結(jié)果輸出到顯示器屏幕上。從操作系統(tǒng)的角度看,每一個與主機相連的輸入輸出設(shè)備都被看作一個文件。除了以終端為對象進行輸入和輸出外,還經(jīng)常用磁盤(光盤)作為輸入輸出對象,磁盤文件既可以作為輸入文件,也可以作為輸出文件。

程序的輸入指的是從輸入文件將數(shù)據(jù)傳送給程序,程序的輸出指的是從程序?qū)?shù)據(jù)傳送給輸出文件。

C++輸入輸出包含以下三個方面的內(nèi)容:
對系統(tǒng)指定的標準設(shè)備的輸入和輸出。即從鍵盤輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標準的輸入輸出,簡稱標準I/O。
以外存磁盤文件為對象進行輸入和輸出,即從磁盤文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤文件。以外存文件為對象的輸入輸出稱為文件的輸入輸出,簡稱文件I/O。
對內(nèi)存中指定的空間進行輸入和輸出。通常指定一個字符數(shù)組作為存儲空間(實際上可以利用該空間存儲任何信息)。這種輸入和輸出稱為字符串輸入輸出,簡稱串I/O。

C++采取不同的方法來實現(xiàn)以上種輸入輸出。為了實現(xiàn)數(shù)據(jù)的有效流動,C++系統(tǒng)提供了龐大的I/O類庫,調(diào)用不同的類去實現(xiàn)不同的功能。

在C語言中,用printf和scanf進行輸入輸出,往往不能保證所輸入輸出的數(shù)據(jù)是可靠的安全的。在C++的輸入輸出中,編譯系統(tǒng)對數(shù)據(jù)類型進行嚴格的檢查,凡是類型不正確的數(shù)據(jù)都不可能通過編譯。因此C++的I/O操作是類型安全(type safe)的。C++的I/O操作是可擴展的,不僅可以用來輸入輸出標準類型的數(shù)據(jù),也可以用于用戶自定義類型的數(shù)據(jù)。C++對標準類型的數(shù)據(jù)和對用戶聲明類型數(shù)據(jù)的輸入輸出,采用同樣的方法處理。C++通過I/O類庫來實現(xiàn)豐富的I/O功能。C++的輸入輸出優(yōu)于C語言中的printf和scanf,但是比較復(fù)雜,要掌握許多細節(jié)。
C++的I/O對C的發(fā)展--類型安全和可擴展性

在C語言中,用primf和scanf進行輸人輸出,往往不能保證所輸入輸出的數(shù)據(jù)是可靠的、安全的。學(xué)過C語言的讀者可以分析下面的用法,想用格式符%d輸出一個整數(shù), 但不小心用它輸出了單精度變量和字符串,會出現(xiàn)什么情況?假定所用的系統(tǒng)int型占兩個字節(jié)。

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

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

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

假如已有聲明語句“int i = 1; ”,定義i為整型變量,其初值為1。編譯系統(tǒng)不認為上面的scanf語句出錯,而是將輸人的值存放到地址為000001的內(nèi)存單元中,這個錯誤可能產(chǎn)生嚴重的后果。

C++為了與C兼容,保留了用printf和scanf進行輸出和輸人的方法,以便使過去所編寫的大量的C程序仍然可以在C ++的環(huán)境下運行,但是希望讀者在編寫新的C ++程 序時不要用C的輸入輸出機制,而要用C++自己特有的輸人輸出方法。在C++的輸入輸出中,編譯系統(tǒng)對數(shù)據(jù)類型進行嚴格的檢查,凡是類型不正確的數(shù)據(jù)都不可能通過編譯。因此C++的I/O操作是類型安全(type safe)的。

此外,用printf和scanf可以輸出和輸入標準類型的數(shù)據(jù)(如int、float、double、char), 但無法輸出用戶自己聲明的類型(如數(shù)組、結(jié)構(gòu)體、類)的數(shù)據(jù)。在C++中,會經(jīng)常遇到對類對象的輸人輸出,顯然無法使用printf和scanf來處理。C++的I/O操作是可擴展 的,不僅可以用來輸人輸出標準類型的數(shù)據(jù),也可以用于用戶自定義類型的數(shù)據(jù)。C++對標準類型的數(shù)據(jù)和對用戶聲明類型數(shù)據(jù)的輸人輸出,采用同樣的方法處理。顯然,在用戶聲明了一個新類后,是無法用printf和scanf 函數(shù)直接輸出和輸人這個類的對象的。

可擴展性是C++輸人輸出的重要特點之一,它能提高軟件的重用性,加快軟件的開 發(fā)過程。

C++通過I/O類庫來實現(xiàn)豐富的I/O功能。這樣使C++的輸人輸出明顯地優(yōu)于C 語言中的printf和scanf,但是也為之付出了代價,C++的I/O系統(tǒng)變得比較復(fù)雜,要掌握許多細節(jié)。在本章中只能介紹其基本的概念和基本的操作,有些具體的細節(jié)可在日后實際深入應(yīng)用時再進一步掌握。

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

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

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

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

了解了類和對象后,我們對C++的輸入輸出應(yīng)當有更深刻的認識。

C++編譯系統(tǒng)提供了用于輸入輸出的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類庫中還有其他一些類,但是對于一般用戶來說,以上這些已能滿足需要了。如果想深入了解類庫的內(nèi)容和使用,可參閱所用的C++系統(tǒng)的類庫手冊。
與iostream類庫有關(guān)的頭文件

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

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

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

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

  ostream cout ( stdout);


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

  cout <<3;


就會在顯示器的屏幕上輸出3。
在iostream頭文件中重載運算符

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

  #include <iostream>

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

  ostream operator << (im ); //用于向輸出流插入一個int數(shù)據(jù)
  ostream operator << (float ); //用于向輸出流插入一個float數(shù)據(jù)
  ostream operator << (char); //用于向輸出流插入一個char數(shù)據(jù)
  ostream operator << (char * ); //用于向輸出流插入一個字符串數(shù)據(jù)


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

  cout<<"C++";


實際上相當于:

  cout.operator <<("C++")

"C ++"的值是其首字節(jié)地址,是字符型指針(char * )類型,因此選擇調(diào)用上面最后一個運算符重載函數(shù),通過重載函數(shù)的函數(shù)體,將字符串插入到cout流中,函數(shù)返回流對象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 * 類型。

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

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

  >>a


箭頭方向表示把數(shù)據(jù)放人a中。而

  <<a


箭頭方向表示從a中拿出數(shù)據(jù)。

相關(guān)文章

  • C++中jsoncpp庫和nlohmann-json庫實現(xiàn)JSON與字符串類型轉(zhuǎn)換

    C++中jsoncpp庫和nlohmann-json庫實現(xiàn)JSON與字符串類型轉(zhuǎn)換

    jsoncpp是ROS自帶的一個JSON庫,它提供了一些函數(shù)來解析和生成JSON數(shù)據(jù),在ROS中,可以使用jsoncpp庫來實現(xiàn)JSON與字符串類型之間的轉(zhuǎn)換,這篇文章主要介紹了jsoncpp庫和nlohmann-json庫實現(xiàn)JSON與字符串類型轉(zhuǎn)換,需要的朋友可以參考下
    2023-08-08
  • C++詳解鏈棧的實現(xiàn)

    C++詳解鏈棧的實現(xiàn)

    今天我們學(xué)習(xí)的是鏈棧,也就是說棧的鏈式結(jié)構(gòu),我們運用順序鏈的方式來實現(xiàn)。首先呢,鏈棧是不存在存儲空間滿的情況的,所以可以說它是個無底洞,然而我們之前學(xué)的順序棧是有額定空間的
    2022-06-06
  • C++利用兩個棧實現(xiàn)隊列的方法

    C++利用兩個棧實現(xiàn)隊列的方法

    這篇文章主要給大家介紹了關(guān)于C++利用兩個棧實現(xiàn)隊列的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C++ 中virtual 虛函數(shù)用法深入了解

    C++ 中virtual 虛函數(shù)用法深入了解

    這篇文章主要介紹了C++ 中virtual 虛函數(shù)用法深入了解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++實現(xiàn)學(xué)校運動會管理系統(tǒng)

    C++實現(xiàn)學(xué)校運動會管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學(xué)校運動會管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C++深入講解namespace與string關(guān)鍵字的使用

    C++深入講解namespace與string關(guān)鍵字的使用

    namespace命名空間或者叫名字空間,傳統(tǒng)的c++只有一個全局的namespace,namespace引入了復(fù)雜性。namespace允許像類,對象,函數(shù)聚集在一個名字下。本質(zhì)上講namespace是對全局作用域的細分
    2022-05-05
  • 一文搞懂Codec2解碼組件

    一文搞懂Codec2解碼組件

    這篇文章主要介紹了Codec2解碼組件,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 簡單講解哈希表

    簡單講解哈希表

    本文主要介紹了哈希表簡單知識及C語言實現(xiàn)哈希表實例,文中利用圖片以及代碼簡單講解了相關(guān)知識,感興趣的小伙伴可以多多學(xué)習(xí)這篇文章
    2021-09-09
  • C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值

    C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值

    這篇文章主要介紹了C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • JsonCpp中double的問題解決

    JsonCpp中double的問題解決

    本文主要介紹了JsonCpp中double的問題解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

建瓯市| 鹤峰县| 封开县| 尼玛县| 托里县| 饶阳县| 三都| 仁怀市| 乐至县| 竹溪县| 延津县| 兰西县| 成安县| 贺州市| 上饶市| 东阳市| 桓仁| 武威市| 贞丰县| 冷水江市| 邵阳县| 扎赉特旗| 酒泉市| 闽侯县| 五寨县| 巫溪县| 望都县| 宣汉县| 柳林县| 南宁市| 历史| 海盐县| 轮台县| 凤台县| 沙湾县| 子长县| 浦县| 达日县| 万全县| 淮北市| 广东省|