一统翩、C++的I/O對(duì)C的發(fā)展—類型安全和可擴(kuò)展性
C語言中I/O存在問題:
1、在C語言中,用prinff和scanf進(jìn)行輸入輸出未玻,往往不能保證所輸入輸出的數(shù)據(jù)是可靠的、安全的胡控。學(xué)過C語言的讀者可以分析下面的用法:想用格式符%d輸出一個(gè)整數(shù)扳剿,但不小心錯(cuò)用了它輸出單精度變量和字符串,會(huì)出現(xiàn)什么情況?假定所用的系統(tǒng)int型占兩個(gè)字節(jié)昼激。
printf(“%d”庇绽,i)锡搜; //i為整型變量,正確瞧掺,輸出i的值
printf(“%d”耕餐,f); //f為單精度變量辟狈,輸出變量中前兩個(gè)字節(jié)的內(nèi)容
printf(“%d”,”C++”)肠缔;//輸出字符串”C++”的起始地址
2、在用scanf輸入時(shí)哼转,有時(shí)出現(xiàn)的問題是很隱蔽的明未。如
scanf(“%d”,&i)壹蔓; //正確趟妥,輸入一個(gè)整數(shù),賦給整型變量i
scanf(“%d”,i)佣蓉; //漏寫&
假如已有聲明語句”int i=1”披摄,定義i為整型變量,其初值為1勇凭。編譯系統(tǒng)不認(rèn)為上面的scanf語句出錯(cuò)行疏,而是將輸入的值存放到地址為000001的內(nèi)存單元中,這個(gè)錯(cuò)誤可能產(chǎn)生嚴(yán)重的后果套像。
3酿联、用printf和scanf可以輸出和輸入標(biāo)準(zhǔn)類型(如:int,float夺巩,double贞让,char)的數(shù)據(jù),但無法輸出用戶自己聲明的類型(如數(shù)組柳譬、結(jié)構(gòu)體喳张、類)的數(shù)據(jù)。在C++中美澳,會(huì)經(jīng)常遇到對(duì)類對(duì)象的輸入輸出销部,顯然無法使用printf和scanf來處理。C++的I/O操作是可擴(kuò)展的制跟,不僅可以用來輸入輸出標(biāo)準(zhǔn)類型的數(shù)據(jù)舅桩,也可以用于用戶自定義類型的數(shù)據(jù)。C++對(duì)標(biāo)準(zhǔn)類型的數(shù)據(jù)和對(duì)用戶聲明類型數(shù)據(jù)的輸入輸出雨膨,采用同樣的方法處理擂涛。顯然,在用戶聲明了一個(gè)新類后聊记,是無法用printf和scanf函數(shù)直接輸出和輸入這個(gè)類的對(duì)象的撒妈。
解決辦法:
可擴(kuò)展性是C++輸入輸出的重要特點(diǎn)之一恢暖,它能提高軟件的重用性,加快軟件的開發(fā)過程狰右。
C++通過I/O類庫(kù)來實(shí)現(xiàn)豐富的I/0功能杰捂。這樣使C++的輸入輸出明顯地優(yōu)于C語言中的pfintf和scanf,但 是也為之付出了代價(jià)棋蚌,C++的I/O系統(tǒng)變得比較復(fù)雜嫁佳,要掌握許多細(xì)節(jié)。
http://blog.csdn.net/yunwu_gfalisa/article/details/53590547