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

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

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


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

#include  
using namespace std; 
int main() 

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


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

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

#include         // 在C和一些古老的C++中是stdio.h,新標準為了使標準庫 
                                 // 的頭文件與用戶頭文件區別開,均推薦使用不用擴展名 
                                 // 的版本,對于原有C庫,不用擴展名時頭文件名前面要加c 

class MyOutstream 

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

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

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


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

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


MyOutstream myout;         // 隨時隨地為我們服務的全局對象myout 

int main() 

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


      我們已經的myout已經初具形態,可以為我們工作了。程序中的注釋指出兩處要我們特別注意的:即是operator<<函數執行完畢之后,總是返回一個它本身的引用,輸出已經完成,為何還要多此一舉? 
       還記得那個有點奇異的cout.operator<<("Hello, World!").operator<<(endl)么?它能實現意味著我們可以連著書寫 
cout << "Hello, World!" << endl; 
而不是  
cout << "Hello, World!"; 
cout << endl; 
     為何它可以這樣連起來寫?我們分析一下:按執行順序,系統首先調用cout.operator<<("Hello, World!"),然后呢?然后cout.operator<<會返回它本身,就是說在函數的最后一行會出現類似于return *this這樣的語句,因此cout.operator<<("Hello, World!")的調用結果就返回了cout,接著它后面又緊跟著.operator<<(endl),這相當于cout.operator<<(endl)——于是又會進行下一個輸出,如果往下還有很多<<算符,調用就會一直進行……哇噢,是不是很聰明?現在你明白我們的MyOutstream::operator<<最后一行的奧妙了吧! 
       再注意一下main函數中最激動人心的那一行: 
        myout << myStr << a << "\n"; 
       我們知道,最后出現的"\n"可以實現一個換行,不過我們在用C++時教程中總是有意無意地讓我們使用endl,兩者看上去似乎一樣——究竟其中有什么玄妙?查書,書上說endl是一個操縱符(manipulator),它不但實現了換行操作,而且還對輸出緩沖區進行刷新。什么意思呢?原來在執行輸出操作之后,數據并非立刻傳到輸出設備,而是先進入一個緩沖區,當適宜的時機(如設備空閑)后再由緩沖區傳入,也可以通過操縱符flush進行強制刷新: 
cout << "Hello, World! " << "Flush the screen now!!!" << flush; 
       這樣當程序執行到operator<<(flash)之前,有可能前面的字符串數據還在緩沖區中而不是顯示在屏幕上,但執行operator<<(flash)之后,程序會強制把緩沖區的數據全部搬運到輸出設備并將其清空。而操縱符endl相當于<< "\n" << flush的簡寫版本,它先輸出一個換行符,再實現緩沖區的刷新。大概這是因為一般的輸出都是以換行結尾,而結尾處又是習慣進行刷新的時期,方便起見就把兩者結合成了endl。讀者有興趣的話,回去也可以為我們的MyOutstream實現一個類似的myflush和myendl操縱符,相關的用于刷新C函數是fflush。 
       不過可能在屏幕上顯示是手動刷新與否區別看來都不大。但對于文件等輸出對象就不大一樣了:過于頻繁的刷新意味著老是寫盤,會影響速度。因此通常是寫入一定的字節數后再刷新,如何操作?靠的就是這些操縱符。 
        好了,說了這么多,C++的iostream家族與C的print/scanf家庭相比究竟有何優勢?首先是類型處理更安全、智能,想想printf中對付int、float等的"%d"、"%f"等說明符真是多余且麻煩,萬一用錯了搞不好還會死掉;其次是擴展性更強:我要是新定義一個復數類Complex,printf對其是無能為力,最多只能分別輸出實、虛部,而iostream使用的<<、>>操作符都是可重載的,你只要重載相關的運算符就可以了;而且流風格的寫法也比較自然簡潔,不是么?
posted on 2007-07-20 19:52 yoyouhappy 閱讀(479) 評論(0)  編輯 收藏 引用 所屬分類: 學習筆記轉載
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>
            国产精品一区免费视频| 亚洲免费观看高清完整版在线观看熊| 久久精品国产一区二区三区 | 一区二区三区自拍| 欧美主播一区二区三区| 亚洲深爱激情| 国产日韩欧美三区| 久久美女性网| 欧美福利视频| 亚洲永久免费观看| 亚洲欧美日韩国产另类专区| 国产亚洲欧美激情| 亚洲国产精品免费| 欧美性色视频在线| 久久久久久色| 欧美巨乳波霸| 欧美中文在线视频| 麻豆成人在线| 欧美一区二区精品| 欧美激情综合五月色丁香小说| 亚洲午夜视频在线| 久久影视三级福利片| 一区二区三区波多野结衣在线观看| 亚洲视频在线播放| 亚洲国产综合视频在线观看| 亚洲精品视频在线观看网站| 国产亚洲激情视频在线| 国产亚洲精品一区二区| 日韩一区二区精品在线观看| 老**午夜毛片一区二区三区| 欧美一二三区精品| 欧美日韩亚洲视频一区| 亚洲国产精品成人精品| 在线观看日韩av| 午夜亚洲伦理| 性欧美办公室18xxxxhd| 性做久久久久久久久| 性欧美18~19sex高清播放| 欧美四级电影网站| 夜夜夜久久久| 欧美一级二级三级蜜桃| 国产精品一区二区a| 亚洲欧美精品伊人久久| 久久精品人人| 在线观看av不卡| 牛牛影视久久网| 99精品视频一区二区三区| 一区二区三区四区五区精品| 欧美破处大片在线视频| 一区二区三欧美| 亚洲一区二区三区777| 久久久7777| 亚洲精品日韩综合观看成人91| 美女露胸一区二区三区| 亚洲伦理在线观看| 久久国产精彩视频| 亚洲人成啪啪网站| 欧美午夜免费影院| 久久精品国产成人| 亚洲精品影视在线观看| 久久久久久夜| 亚洲一区二区在线| 亚洲欧洲在线视频| 国内外成人免费激情在线视频| 久久一区二区三区av| 亚洲美女在线国产| 国产欧美一区二区三区在线老狼| 久久久99精品免费观看不卡| 亚洲精品中文字幕在线| 麻豆精品网站| 亚洲在线视频观看| 亚洲电影观看| 国产亚洲精品自拍| 国产拍揄自揄精品视频麻豆| 欧美午夜不卡| 欧美精品久久99| 欧美国产一区二区| 免费观看日韩| 欧美国产成人精品| 欧美大尺度在线| 欧美寡妇偷汉性猛交| 老巨人导航500精品| 久久久久国产精品一区| 久久国产视频网站| 久久影院午夜片一区| 美脚丝袜一区二区三区在线观看| 久久综合激情| 欧美日韩精品免费观看视频| 亚洲日本视频| 最新日韩精品| 亚洲美女电影在线| 亚洲激情社区| 99视频精品| 亚洲欧美日韩第一区| 午夜一区在线| 久久人人爽人人爽爽久久| 久久久久在线| 欧美大片免费久久精品三p| 亚洲男同1069视频| 羞羞色国产精品| 美日韩精品免费| 欧美大尺度在线观看| 欧美日韩国产小视频在线观看| 欧美理论大片| 国产精品视频| 亚洲免费在线精品一区| 欧美日韩国产电影| 欧美伦理在线观看| 亚洲制服av| 欧美成人激情视频| 久久精品视频在线观看| 国产精品一区在线观看| 99re在线精品| 宅男精品视频| 欧美高清免费| 欧美在线看片a免费观看| 国产精品久久久久毛片大屁完整版| 久久综合电影| 亚洲激情视频网| 久久免费精品视频| 欧美高清免费| 最近中文字幕日韩精品| 欧美精品一卡二卡| 亚洲欧洲精品一区二区精品久久久| 亚洲日本无吗高清不卡| 欧美+亚洲+精品+三区| 亚洲精品日韩久久| 亚洲午夜在线观看视频在线| 国产麻豆精品久久一二三| 亚洲欧美激情四射在线日| 久久亚洲精品一区二区| 乱人伦精品视频在线观看| 亚洲日本国产| 欧美日本亚洲| 亚洲欧美日韩在线| 新狼窝色av性久久久久久| 一区在线视频| 宅男在线国产精品| 久久国产毛片| 在线观看欧美日本| 欧美视频在线播放| 欧美亚洲午夜视频在线观看| 亚洲盗摄视频| 亚洲一区二区不卡免费| 在线观看成人网| 欧美精品自拍| 久久久精彩视频| 亚洲精品久久久久久一区二区 | 米奇777在线欧美播放| 欧美激情视频一区二区三区不卡| 亚洲视频一二区| 你懂的一区二区| 亚洲午夜国产成人av电影男同| 久久亚洲高清| 亚洲人精品午夜在线观看| 国产精品亚洲综合| 久久一日本道色综合久久| 亚洲性感美女99在线| 麻豆久久婷婷| 久久爱另类一区二区小说| 在线成人激情视频| 国产精品欧美风情| 久久野战av| 欧美在线不卡| 日韩亚洲国产精品| 亚洲高清电影| 久久久91精品国产一区二区精品| 一二三四社区欧美黄| 国内精品久久久久国产盗摄免费观看完整版| 亚洲欧洲精品天堂一级| 国产精品视频一| 欧美.日韩.国产.一区.二区| 久久久久国产一区二区三区四区 | 免费成人在线观看视频| 午夜欧美不卡精品aaaaa| 91久久在线观看| 亚洲国产精品传媒在线观看 | 亚洲人体一区| 影院欧美亚洲| 国内精品写真在线观看| 国产精品久久九九| 欧美性猛片xxxx免费看久爱| 欧美99在线视频观看| 老司机精品视频网站| 欧美中文日韩| 99精品视频免费全部在线| 亚洲国产精品一区二区第一页| 欧美激情精品久久久久| 卡一卡二国产精品| 久久综合色播五月| 欧美综合国产精品久久丁香| 欧美影院在线| 亚洲视频你懂的| 亚洲免费一区二区| 久久国产88| 久久精品国产一区二区三区| 久久精品视频一| 久久久精品性| 欧美sm视频| 欧美好骚综合网|