青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yoyouhappy的秘密花園
歡迎來到我的秘密花園^^
posts - 16,comments - 33,trackbacks - 0
                                                                                                                                               ----------zz自coolbo網(wǎng) 
剛剛想查一下cout的精度,卻看到了這篇文章,keke我是學(xué)到重載運(yùn)算符才大概明白cout是怎么回事的~這篇文章很易懂,對(duì)初學(xué)者會(huì)有幫助奧^_^
#include 
using namespace std; 
int main() 

    cout << "Hello, World!" << endl; 
    return 0; 


       由于以前學(xué)過C,所以這段代碼的其它部分在我看來都還算“正常”,然而cout卻很獨(dú)特:既不是函數(shù),似乎也不是C++特別規(guī)定出來的像if,for一類有特殊語法的“語句”。由于只是初步介紹,所以那本書只是簡(jiǎn)單的說cout是C++中的“標(biāo)準(zhǔn)輸入輸出流”對(duì)象……這于我而言實(shí)在是一個(gè)很深?yuàn)W的術(shù)語。這還沒完,之后又遇見了cin……因?yàn)椴恢准?xì),從此使用它們的時(shí)候都誠(chéng)惶誠(chéng)恐,幾欲逃回C時(shí)代那簡(jiǎn)明的printf(),畢竟好歹我可以說:我在調(diào)用的是一個(gè)函數(shù)。那有著一長(zhǎng)串<<、>>的玩意,究竟算怎么回事呢?我一直想把它們當(dāng)作關(guān)鍵字,可偏偏不是,而且居然是用C++語言“做”出來的,呵!但printf()用多了就開始有人好心地批判我的程序“C語言痕跡過重”…… 
       后來隨著學(xué)習(xí)的深入,總算大概明白了cout/cin/cerr/...的鬼把戲:那些東東不過是變著法兒“哄人”,其實(shí)說到底還是函數(shù)調(diào)用,不過這函數(shù)有些特殊,用的是運(yùn)算符重載,確切地說(以下還是以cout為例)是重載了“<<”運(yùn)算符。我們現(xiàn)在就讓它現(xiàn)出函數(shù)的本來面目,請(qǐng)看Hello World!的等效版本: 

#include  
using namespace std; 
int main() 

    cout.operator<<("Hello, World!"); 
    cout.operator<<(endl); 
    return 0; 


       編譯運(yùn)行,結(jié)果與經(jīng)典版無二。上面程序應(yīng)該更容易理解了:cout是一個(gè)iostream類的對(duì)象,它有一個(gè)成員運(yùn)算符函數(shù)operator<<,每次調(diào)用的時(shí)候就會(huì)向輸出設(shè)備(一般就是屏幕啦)輸出東東。嗯,這里有一個(gè)問題:為什么函數(shù)operator<<能夠接受不同類型的數(shù)據(jù),如整型、浮點(diǎn)型、字符串甚至指針,等等呢? 
       我想你現(xiàn)在已經(jīng)猜到了,沒錯(cuò),就是用運(yùn)算符重載。運(yùn)算符函數(shù)與一般函數(shù)基本無異,可以任意重載。標(biāo)準(zhǔn)庫的設(shè)計(jì)者們?cè)缫呀?jīng)為我們定制了iostream::operator<<對(duì)于各種C++基本數(shù)據(jù)類型的重載版本,這才使得我們這些初學(xué)者們一上來就享受到cout << "Hello, World!" << endl;的簡(jiǎn)潔——等等,這一行是由兩個(gè)<<將"Hello, World"與"endl"操作符連接起來,那么我們的第二版Hello, World!似乎也應(yīng)該寫成: 
cout.operator<<("Hello, World!").operator<<(endl); 
才算“強(qiáng)等效”。究竟可不可以這樣寫?向編譯器確認(rèn)一下……OK,No Problem! 

       嗯,我們已經(jīng)基本上看出了cout的實(shí)質(zhì),現(xiàn)在不妨動(dòng)動(dòng)手,自己來實(shí)現(xiàn)一個(gè)cout的簡(jiǎn)化版(Lite),為了區(qū)分,我們把我們?cè)O(shè)計(jì)的cout對(duì)象命名的myout,myout對(duì)象所屬的類為MyOutstream。我們要做的就是為MyOutstream類重載一系列不同類型的operator<<運(yùn)算符函數(shù),簡(jiǎn)單起見,這里我們僅實(shí)現(xiàn)了對(duì)整型(int)與字符串型(char*)的重載。為了表示與iostream斷絕關(guān)系,我們不再用頭文件iostream,而使用古老的stdio中的printf函數(shù)進(jìn)行輸出,程序很簡(jiǎn)單,包括完整的main函數(shù),均列如下: 

#include         // 在C和一些古老的C++中是stdio.h,新標(biāo)準(zhǔn)為了使標(biāo)準(zhǔn)庫 
                                 // 的頭文件與用戶頭文件區(qū)別開,均推薦使用不用擴(kuò)展名 
                                 // 的版本,對(duì)于原有C庫,不用擴(kuò)展名時(shí)頭文件名前面要加c 

class MyOutstream 

public: 
    const MyOutstream& operator<<(int value) const;  // 對(duì)整型變量的重載 
    const MyOutstream& operator<<(char* str) const; // 對(duì)字符串型的重載 
}; 

const MyOutstream& MyOutstream::operator<<(int value) const 

    printf("%d", value); 
    return *this;                  // 注意這個(gè)返回…… 


const MyOutstream& MyOutstream::operator<<(char* str) const 

    printf("%s", str); 
    return *this;                  // 同樣,這里也留意一下…… 


MyOutstream myout;         // 隨時(shí)隨地為我們服務(wù)的全局對(duì)象myout 

int main() 

    int a = 2003; 
    char* myStr = "Hello, World!"; 
    myout << myStr << a << "\n"; 
    return 0; 


      我們已經(jīng)的myout已經(jīng)初具形態(tài),可以為我們工作了。程序中的注釋指出兩處要我們特別注意的:即是operator<<函數(shù)執(zhí)行完畢之后,總是返回一個(gè)它本身的引用,輸出已經(jīng)完成,為何還要多此一舉? 
       還記得那個(gè)有點(diǎn)奇異的cout.operator<<("Hello, World!").operator<<(endl)么?它能實(shí)現(xiàn)意味著我們可以連著書寫 
cout << "Hello, World!" << endl; 
而不是  
cout << "Hello, World!"; 
cout << endl; 
     為何它可以這樣連起來寫?我們分析一下:按執(zhí)行順序,系統(tǒng)首先調(diào)用cout.operator<<("Hello, World!"),然后呢?然后cout.operator<<會(huì)返回它本身,就是說在函數(shù)的最后一行會(huì)出現(xiàn)類似于return *this這樣的語句,因此cout.operator<<("Hello, World!")的調(diào)用結(jié)果就返回了cout,接著它后面又緊跟著.operator<<(endl),這相當(dāng)于cout.operator<<(endl)——于是又會(huì)進(jìn)行下一個(gè)輸出,如果往下還有很多<<算符,調(diào)用就會(huì)一直進(jìn)行……哇噢,是不是很聰明?現(xiàn)在你明白我們的MyOutstream::operator<<最后一行的奧妙了吧! 
       再注意一下main函數(shù)中最激動(dòng)人心的那一行: 
        myout << myStr << a << "\n"; 
       我們知道,最后出現(xiàn)的"\n"可以實(shí)現(xiàn)一個(gè)換行,不過我們?cè)谟肅++時(shí)教程中總是有意無意地讓我們使用endl,兩者看上去似乎一樣——究竟其中有什么玄妙?查書,書上說endl是一個(gè)操縱符(manipulator),它不但實(shí)現(xiàn)了換行操作,而且還對(duì)輸出緩沖區(qū)進(jìn)行刷新。什么意思呢?原來在執(zhí)行輸出操作之后,數(shù)據(jù)并非立刻傳到輸出設(shè)備,而是先進(jìn)入一個(gè)緩沖區(qū),當(dāng)適宜的時(shí)機(jī)(如設(shè)備空閑)后再由緩沖區(qū)傳入,也可以通過操縱符flush進(jìn)行強(qiáng)制刷新: 
cout << "Hello, World! " << "Flush the screen now!!!" << flush; 
       這樣當(dāng)程序執(zhí)行到operator<<(flash)之前,有可能前面的字符串?dāng)?shù)據(jù)還在緩沖區(qū)中而不是顯示在屏幕上,但執(zhí)行operator<<(flash)之后,程序會(huì)強(qiáng)制把緩沖區(qū)的數(shù)據(jù)全部搬運(yùn)到輸出設(shè)備并將其清空。而操縱符endl相當(dāng)于<< "\n" << flush的簡(jiǎn)寫版本,它先輸出一個(gè)換行符,再實(shí)現(xiàn)緩沖區(qū)的刷新。大概這是因?yàn)橐话愕妮敵龆际且該Q行結(jié)尾,而結(jié)尾處又是習(xí)慣進(jìn)行刷新的時(shí)期,方便起見就把兩者結(jié)合成了endl。讀者有興趣的話,回去也可以為我們的MyOutstream實(shí)現(xiàn)一個(gè)類似的myflush和myendl操縱符,相關(guān)的用于刷新C函數(shù)是fflush。 
       不過可能在屏幕上顯示是手動(dòng)刷新與否區(qū)別看來都不大。但對(duì)于文件等輸出對(duì)象就不大一樣了:過于頻繁的刷新意味著老是寫盤,會(huì)影響速度。因此通常是寫入一定的字節(jié)數(shù)后再刷新,如何操作?靠的就是這些操縱符。 
        好了,說了這么多,C++的iostream家族與C的print/scanf家庭相比究竟有何優(yōu)勢(shì)?首先是類型處理更安全、智能,想想printf中對(duì)付int、float等的"%d"、"%f"等說明符真是多余且麻煩,萬一用錯(cuò)了搞不好還會(huì)死掉;其次是擴(kuò)展性更強(qiáng):我要是新定義一個(gè)復(fù)數(shù)類Complex,printf對(duì)其是無能為力,最多只能分別輸出實(shí)、虛部,而iostream使用的<<、>>操作符都是可重載的,你只要重載相關(guān)的運(yùn)算符就可以了;而且流風(fēng)格的寫法也比較自然簡(jiǎn)潔,不是么?
posted on 2007-07-20 19:52 yoyouhappy 閱讀(475) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 學(xué)習(xí)筆記轉(zhuǎn)載
Priceline Travel
Priceline Travel
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美人成网站| 久久精品国产一区二区电影 | 久久不射2019中文字幕| 亚洲香蕉视频| 性欧美暴力猛交另类hd| 久久久国产午夜精品| 麻豆精品国产91久久久久久| 欧美激情中文字幕一区二区| 欧美日韩一区二区在线观看视频| 国产精品久久久久aaaa樱花| 国产一区二区日韩精品欧美精品| 日韩亚洲欧美中文三级| 欧美日韩人人澡狠狠躁视频| 国产精品另类一区| 一区二区三区在线高清| 一区二区三区四区五区精品| 欧美在线三级| 最近中文字幕日韩精品| 99精品99| 久久视频一区| 国产精品欧美精品| 在线精品视频一区二区三四| 亚洲专区一区| 欧美激情精品久久久| 亚洲香蕉网站| 欧美日韩第一区日日骚| 国模精品一区二区三区| 一区二区三区www| 久久免费视频在线观看| 一区二区三区欧美在线| 久久久久久香蕉网| 国产精品一区一区| 亚洲最黄网站| 欧美福利电影在线观看| 香蕉久久精品日日躁夜夜躁| 欧美日韩蜜桃| 亚洲久久在线| 欧美电影免费观看高清完整版| 亚洲欧美日韩人成在线播放| 欧美三区美女| 中日韩午夜理伦电影免费| 亚洲高清资源| 麻豆久久精品| 91久久精品日日躁夜夜躁欧美| 久久久精品国产免大香伊 | 久久男女视频| 亚洲欧美国产va在线影院| 欧美日韩一区二区在线观看视频| 亚洲激情午夜| 亚洲动漫精品| 免费视频亚洲| 亚洲欧洲日本国产| 亚洲二区在线视频| 久久综合网hezyo| 1769国内精品视频在线播放| 久色成人在线| 久久久久久久久久久久久女国产乱| 国产九九精品| 久久成人精品视频| 欧美综合二区| 伊人久久噜噜噜躁狠狠躁| 久久蜜臀精品av| 久久久综合香蕉尹人综合网| 韩国福利一区| 欧美不卡视频| 欧美黑人国产人伦爽爽爽| 亚洲精品美女在线| 亚洲麻豆av| 国产精品免费看| 亚洲欧洲一区二区三区| 欧美va天堂在线| 亚洲日韩成人| 99re6热只有精品免费观看| 欧美日韩视频一区二区| 亚洲女同性videos| 欧美一区二区视频在线观看2020 | 欧美精品在线一区二区三区| 亚洲另类春色国产| 亚洲图片欧美一区| 黑人巨大精品欧美黑白配亚洲 | 99re亚洲国产精品| 亚洲色诱最新| 精品电影一区| 亚洲免费观看在线视频| 国产伦理一区| 亚洲国产精品一区制服丝袜| 欧美午夜不卡在线观看免费 | 欧美激情片在线观看| 欧美日本韩国在线| 欧美在线视频一区| 蜜桃伊人久久| 香蕉成人伊视频在线观看| 久久久久久综合| 亚洲尤物影院| 久久综合九色综合欧美狠狠| 亚洲视频电影在线| 久久久爽爽爽美女图片| 亚洲伊人久久综合| 久久亚洲一区二区| 午夜亚洲激情| 欧美极品欧美精品欧美视频| 久久激情五月激情| 欧美日韩在线精品一区二区三区| 久久尤物电影视频在线观看| 欧美日韩免费一区二区三区| 久久亚洲美女| 国产精品毛片一区二区三区| 欧美黄色片免费观看| 国产亚洲免费的视频看| 亚洲免费观看在线视频| 91久久精品视频| 久久蜜桃精品| 久久精品成人一区二区三区 | 欧美第一黄色网| 久久久久五月天| 国产精品黄色| 日韩视频免费看| 亚洲日本电影| 久久久久在线| 久久久久国内| 国产精品久久久久久久久免费| 亚洲福利视频网| 亚洲二区在线| 欧美午夜不卡视频| 亚洲毛片在线免费观看| 日韩西西人体444www| 欧美1级日本1级| 欧美日韩激情小视频| 久久人人97超碰国产公开结果| 欧美一级精品大片| 99re热这里只有精品视频| 久久久999成人| 欧美中文在线视频| 国产精品久久久久91| 日韩亚洲不卡在线| 亚洲美女在线国产| 欧美精品一区二| 欧美大片第1页| 亚洲青涩在线| 欧美a级在线| 最新亚洲一区| 一区二区视频欧美| 久久精品久久综合| 欧美国产日韩在线| 亚洲毛片在线看| 欧美视频观看一区| 一本色道久久综合亚洲91| 在线一区二区日韩| 欧美午夜一区二区| 亚洲欧美日本日韩| 麻豆久久精品| 亚洲精品男同| 欧美日韩另类丝袜其他| 亚洲你懂的在线视频| 久久久夜色精品亚洲| 亚洲精品国产精品国自产观看浪潮| 欧美久久九九| 午夜激情综合网| 欧美a级片网站| 亚洲视频视频在线| 国产一区久久| 欧美精品一区三区在线观看| 亚洲视频在线一区| 久久一综合视频| 一区二区三区黄色| 韩日视频一区| 欧美日韩免费视频| 午夜一区不卡| 91久久嫩草影院一区二区| 午夜天堂精品久久久久| 在线日韩欧美视频| 国产精品久久久久久久久果冻传媒| 亚洲欧美日韩专区| 亚洲国产另类久久精品| 欧美主播一区二区三区美女 久久精品人 | 久久性天堂网| 亚洲色诱最新| 今天的高清视频免费播放成人| 欧美大片免费观看| 亚洲欧美综合一区| 99re6这里只有精品| 噜噜噜91成人网| 欧美一区二区三区免费观看| 怡红院精品视频| 亚洲激情国产| 久久久久久久尹人综合网亚洲| 亚洲乱码国产乱码精品精98午夜| 国产精品三区www17con| 欧美精品久久一区二区| 久久久人成影片一区二区三区观看 | 欧美激情乱人伦| 欧美一区二区大片| 亚洲视频在线观看一区| 亚洲国产片色| 狠狠久久婷婷| 国产在线欧美| 国产日韩欧美一区| 国产精品亚洲欧美| 国产精品一区二区久激情瑜伽| 欧美视频一区二区三区…|