C cout endl

cout是標準庫iostream中的定義好的一個對象(如果你不知道啥叫對象,請參考C++的相關書籍,我這裏給大家提供一本我認爲比較好的C++學習書籍:PDF電子檔鏈接:http://pan.baidu.com/s/1jHx88dg 密碼:xawx),這個cout對象用於將字符數字等顯示到屏幕上。cout與<<配合使用就能將字符數字等顯示到屏幕上。
那麼爲cout與<<爲啥能這樣配合呢?下面就對這個問題解釋~
我們不去探究具體的實現過程,我們只從編譯器對“cout<<”的認識角度去說明這個問題!在認識這個問題前我們首先看下我們的C++編譯器對“+”是怎麼實現的?
在C++中的任何運算都是通過函數來實現的,比如說,1+2,編譯器會自動將這個表達式解釋爲:operator+(1,2);
接着再找一下有沒有以operator+(int,int)爲原型的函數,由於c++已經定義了一個這樣的函數,因此會自動調用該函數,然後再將1和2當參數傳遞進去。同樣如果執行浮點數的加法運算4.5+5.6,則也是調用該函數operator+(4.5,5.6);,只是傳遞的參數類型不同,因而通過重載函數實現了整型和浮點型的參數傳遞。【PS:如果你不知道什麼叫重載函數,可以參看文章:http://c.biancheng.net/cpp/biancheng/view/35.html,函數重載可是c++的一個非常重要的基礎,不懂這個完全沒法看懂好的c++代碼】
同理,對於++運算符,比如++i,系統會自動調用operator++(),參數就是i;在C++中由於多了個對象的念,爲了便於大家對程序的書寫,所以規定,對象名的前面和後面跟一個操作符等於“對象.操作符”,如果a是一個對象,那麼a++或++a等價於a.++再等價於a.operator++(),即相當於調用了a對象中的一個方法函數opeartor++()。再同理,cout<<"Hello!"等價於cout.operator<<( Hello!)。說到這裏,大家肯定還是不明白語句“cout<<"Hello!"<<endl;”中“<<endl”爲什麼可以直接跟在cout<<"Hello!"的後面?
要說明這個問題,我們其實看下錶達式1+2+3;就可以理解了,+3不是直接跟在1+2的後面麼,而且這個表達示我們都用爛了,根本沒啥問題。所以同理我們對於符號<<可以寫出這樣的形式1<<2<<3;,所以相同的形式有cout<<"Hello!"<<endl;這樣就理解了這種寫法了撒!這句話程序編譯後運行的順序時先運行cout<<"Hello!"{即cout.opeartor++( Hello!))},再運行cout<<endl{即cout.opeartor++( endl))}。既然說到這裏了,那順便說下endl是什麼東東?它的作用就是“向緩衝區插入換行符號並刷新,將內容寫入輸出設備”!
至於cout.operator<<( Hello!)具體和cout.opeartor++( endl))是怎麼樣實現將字符顯示到屏幕上的,我們就不用操心了,這就是人家給我們一個封裝好的對象,就沒必要考慮那麼多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章