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

首頁 > 學院 > 開發設計 > 正文

C++入門解惑——淺析cout

2019-11-17 05:09:01
字體:
來源:轉載
供稿:網友
#include usingnamespacestd; intmain() {
cout<<"Hello,World!"<return0; }
由于以前學過C,所以這段代碼的其它部分在我看來都還算“正?!保欢鴆out卻很獨特:既不是函數,似乎也不是C++非凡規定出來的像if,for一類有非凡語法的“語句”。由于只是初步介紹,所以那本書只是簡單的說cout是C++中的“標準輸入輸出流”對象……這于我而言實在是一個很深奧的術語。這還沒完,之后又遇見了cin……因為不知底細,從此使用它們的時候都誠惶誠恐,幾欲逃回C時代那簡明的PRintf(),究竟好歹我可以說:我在調用的是一個函數。那有著一長串<<、>>的玩意,究竟算怎么回事呢?我一直想把它們當作要害字,可偏偏不是,而且居然是用C++語言“做”出來的,呵!但printf()用多了就開始有人好心地批判我的程序“C語言痕跡過重”…… 后來隨著學習的深入,總算大概明白了cout/cin/cerr/...的鬼把戲:那些東東不過是變著法兒“哄人”,其實說到底還是函數調用,不過這函數有些非凡,用的是運算符重載,確切地說(以下還是以cout為例)是重載了“<<”運算符。我們現在就讓它現出函數的本來面目,請看HelloWorld!的等效版本: #include usingnamespacestd; intmain() { cout.Operator<<("Hello,World!"); cout.operator<<(endl); return0; } 編譯運行,結果與經典版無二。上面程序應該更輕易理解了:cout是一個iostream類的對象,它有一個成員運算符函數operator<<,每次調用的時候就會向輸出設備(一般就是屏幕啦)輸出東東。嗯,這里有一個問題:為什么函數operator<<能夠接受不同類型的數據,如整型、浮點型、字符串甚至指針,等等呢? 我想你現在已經猜到了,沒錯,就是用運算符重載。運算符函數與一般函數基本無異,可以任意重載。標準庫的設計者們早已經為我們定制了iostream::operator<<對于各種C++基本數據類型的重載版本,這才使得我們這些初學者們一上來就享受到cout<<"Hello,World!"<cout.operator<<("Hello,World!").operator<<(endl); 才算“強等效”。究竟可不可以這樣寫?向編譯器確認一下……OK,NoProblem! 嗯,我們已經基本上看出了cout的實質,現在不妨動動手,自己來實現一個cout的簡化版(Lite),為了區分,我們把我們設計的cout對象命名的myout,myout對象所屬的類為MyOutstream。我們要做的就是為MyOutstream類重載一系列不同類型的operator<<運算符函數,簡單起見,這里我們僅實現了對整型(int)與字符串型(char*)的重載。為了表示與iostream斷絕關系,我們不再用頭文件iostream,而使用古老的stdio中的printf函數進行輸出,程序很簡單,包括完整的main函數,均列如下: #include//在C和一些古老的C++中是stdio.h,新標準為了使標準庫 //的頭文件與用戶頭文件區別開,均推薦使用不用擴展名 //的版本,對于原有C庫,不用擴展名時頭文件名前面要加c classMyOutstream {
public: constMyOutstream&operator<<(intvalue)const;//對整型變量的重載 constMyOutstream&operator<<(char*str)const;//對字符串型的重載 }; constMyOutstream&MyOutstream::operator<<(intvalue)const { printf("%d",value); return*this;//注重這個返回…… } constMyOutstream&MyOutstream::operator<<(char*str)const { printf("%s",str); return*this;//同樣,這里也留意一下…… } MyOutstreammyout;//隨時隨地為我們服務的全局對象myout intmain() { inta=2003; char*myStr="Hello,World!"; myout<我們已經的myout已經初具形態,可以為我們工作了。程序中的注釋指出兩處要我們非凡注重的:即是operator<<函數執行完畢之后,總是返回一個它本身的引用,輸出已經完成,為何還要多此一舉? 還記得那個有點奇異的cout.operator<<("Hello,World!").operator<<(endl)么?它能實現意味著我們可以連著書寫 cout<<"Hello,World!"<而不是 cout<<"Hello,World!"; cout<為何它可以這樣連起來寫?我們分析一下:按執行順序,系統首先調用cout.operator<<("Hello,World!"),然后呢?然后cout.operator<<會返回它本身,就是說在函數的最后一行會出現類似于return*this這樣的語句,因此cout.operator<<("Hello,World!")的調用結果就返回了cout,接著它后面又緊跟著.operator<<(endl),這相當于cout.operator<<(endl)——于是又會進行下一個輸出,假如往下還有很多<<算符,調用就會一直進行……哇噢,是不是很聰明?現在你明白我們的MyOutstream::operator<<最后一行的奧妙了吧! 再注重一下main函數中最激動人心的那一行: myout<ipulator),它不但實現了換行操作,而且還對輸出緩沖區進行刷新。什么意思呢?原來在執行輸出操作之后,數據并非馬上傳到輸出設備,而是先進入一個緩沖區,當適宜的時機(如設備空閑)后再由緩沖區傳入,也可以通過操縱符flush進行強制刷新: cout<<"Hello,World!"<<"Flushthescreennow!!!"<這樣當程序執行到operator<<(Flash)之前,有可能前面的字符串數據還在緩沖區中而不是顯示在屏幕上,但執行operator<<(flash)之后,程序會強制把緩沖區的數據全部搬運到輸出設備并將其清空。而操縱符endl相當于<<"/n"<不過可能在屏幕上顯示是手動刷新與否區別看來都不大。但對于文件等輸出對象就不大一樣了:過于頻繁的刷新意味著老是寫盤,會影響速度。因此通常是寫入一定的字節數后再刷新,如何操作?靠的就是這些操縱符。
好了,說了這么多,C++的iostream家族與C的print/scanf家庭相比究竟有何優勢?首先是類型處理更安全、智能,想想printf中對付int、float等的"%d"、"%f"等說明符真是多余且麻煩,萬一用錯了搞不好還會死掉;其次是擴展性更強:我要是新定義一個復數類Complex,printf對其是無能為力,最多只能分別輸出實、虛部,而iostream使用的<<、>>操作符都是可重載的,你只要重載相關的運算符就可以了;而且流風格的寫法也比較自然簡潔,不是么? 更多文章 更多內容請看C/C++技術學堂專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97人人模人人爽人人喊中文字| 欧美精品福利视频| 亚洲最大的免费| 国产视频精品在线| 国产精品普通话| 亚洲欧洲xxxx| 91在线网站视频| 97久久精品国产| 永久免费精品影视网站| 精品一区二区三区四区| 欧美成人性色生活仑片| 国色天香2019中文字幕在线观看| 精品日本美女福利在线观看| 久久精品视频在线播放| 久久久久久久久国产| 亚洲精品美女久久久| 亚洲第一区在线| 欧美成人h版在线观看| 97婷婷大伊香蕉精品视频| 亚洲精品欧美日韩专区| 欧美激情精品在线| 欧美日韩爱爱视频| 91精品国产自产91精品| 久久精品成人一区二区三区| 日韩在线观看免费| 日韩精品免费电影| 亚洲成人动漫在线播放| 欧美日韩xxxxx| 日韩中文字幕在线精品| 精品成人久久av| 国产精品美女无圣光视频| 国产精品视频xxx| 91精品久久久久久久| 国产成人福利夜色影视| 欧美多人乱p欧美4p久久| 亚洲国产精品久久久久秋霞蜜臀| 国产一区二区三区中文| 精品女同一区二区三区在线播放| 国产精品免费观看在线| 日韩高清不卡av| 久久久久久高潮国产精品视| 久久99精品久久久久久琪琪| 欧美日韩中文字幕在线视频| 韩国一区二区电影| 欧美激情亚洲精品| 久99九色视频在线观看| 91精品国产综合久久久久久蜜臀| 九色91av视频| 久久精品人人做人人爽| 亚洲丁香久久久| 久久精品一本久久99精品| 久久精品国产亚洲精品2020| 欧美成人午夜剧场免费观看| 69久久夜色精品国产69乱青草| 668精品在线视频| 欧美性视频网站| 91在线视频一区| 久久成人亚洲精品| 午夜精品久久久久久99热软件| 国语自产精品视频在线看一大j8| 日本国产欧美一区二区三区| 亚洲性无码av在线| 姬川优奈aav一区二区| 国产亚洲精品美女| 欧美日韩日本国产| 91精品视频免费| 亚洲成人xxx| 国产精品日日摸夜夜添夜夜av| 亚洲人成网在线播放| 国产精品免费在线免费| 欧美另类暴力丝袜| 一区二区亚洲精品国产| 欧美情侣性视频| 中文字幕精品www乱入免费视频| 国产精品天天狠天天看| 日韩欧美国产一区二区| 中文字幕一区二区精品| 91人人爽人人爽人人精88v| 在线看欧美日韩| 欧美二区乱c黑人| 精品久久久久久久大神国产| 国产精品久久激情| 欧美日韩一区二区精品| 亚洲变态欧美另类捆绑| 在线日韩精品视频| 97久久精品视频| 91日本在线观看| 欧美视频一区二区三区…| 精品丝袜一区二区三区| 欧美一级片在线播放| 中文字幕在线视频日韩| 国产三级精品网站| 成人免费福利在线| 欧美精品一区二区三区国产精品| 亚洲天堂色网站| 一本大道亚洲视频| 成人av资源在线播放| 国产精品都在这里| 久久久久在线观看| 亚洲一区二区三区视频播放| 亚洲无亚洲人成网站77777| 欧美大全免费观看电视剧大泉洋| 热久久美女精品天天吊色| 国产成人综合av| 伊人久久久久久久久久久久久| 庆余年2免费日韩剧观看大牛| 欧美最顶级的aⅴ艳星| 黑人精品xxx一区一二区| 国产精品久久久久久久av大片| 国产偷国产偷亚洲清高网站| 欧美一区二区三区图| 欧美第一淫aaasss性| 国产精品色悠悠| 久久综合伊人77777尤物| 91精品国产自产在线观看永久| 精品国产网站地址| xxx成人少妇69| 国内偷自视频区视频综合| 日韩天堂在线视频| 91sao在线观看国产| 国产精品手机播放| 中文字幕在线成人| 国产精品香蕉av| 久久人人爽人人爽人人片av高清| 日本伊人精品一区二区三区介绍| 98午夜经典影视| 韩国v欧美v日本v亚洲| 精品国内产的精品视频在线观看| 国产日韩一区在线| 91香蕉嫩草影院入口| 国产精品爽爽爽| 91在线高清视频| 亚洲在线www| 国产精品96久久久久久| 中文字幕精品一区二区精品| 国产精品美女www| 国产精品美腿一区在线看| 欧美性生活大片免费观看网址| 精品久久久久久久久久久久久| 亚洲日本成人女熟在线观看| 日韩中文字幕在线视频| 爱福利视频一区| 夜夜嗨av一区二区三区四区| 97成人超碰免| 国产精品久久久久99| 91精品国产91久久久久久最新| 成人国产精品久久久| 国产日韩欧美在线看| 伊人久久精品视频| 欧美精品激情blacked18| 在线免费观看羞羞视频一区二区| 亚洲精品免费在线视频| 热久久视久久精品18亚洲精品| 日韩一中文字幕| 91po在线观看91精品国产性色| 亚洲第一偷拍网| 亚洲free性xxxx护士白浆| 久久99精品国产99久久6尤物| 日本一区二区在线播放| 亚洲最大福利视频网站| 91色琪琪电影亚洲精品久久| 国产精品吹潮在线观看| 91麻豆国产语对白在线观看| 91免费高清视频|