筆記範圍:1.5節
本節的內容不是很難,學過一點編程的人都會很容易接受,但是,我一直以來就有一種感覺。自己用的最多但又用的最糊塗的也就是i/o系統,很明顯i/o實現了對電腦裝置的直接操作。在c++裡我們知道它是通過ios類的對象來完成的。從感覺上講,遠遠不如c來的直接,明白。當然這樣做的好處是大大簡單了我們的操作,但是不幸的是這會給我們的理解造成一定的困難,下面我將提出自己疑問。
第一, 大家都知道,我們的io操作是通過三個對象來完成的。cin、cout、cerr。作者在描述的時候用了“綁定”這個詞,很明顯被抽象的資料類型和具體裝置實現了完美的對接。但是我的問題是,從ADT的思路來說,這些對象封裝了那許資料?提供那些操作?這些資料和介面是如何對裝置進行控制的?很顯然,以我們現在的知識很難回答這些問題。就算是自以為合理的估計也不能,但是這樣的思考,有助於我們對類設計思維的熟悉,但是思考到此為止罷。不然我就誤人子弟了。
第二, 還有一個問題,初學者也許會問,作者告訴我們cout和cerr都可以用來輸出。他們的區別一個是一般的輸出,一個是輸出錯誤資訊。可是這樣的解釋並不能使我們這些好奇的人滿意。於是我做了個惡作劇,改寫了我們那個知名的”hello world!”
int main() {
cerr<<”hello world!”<<endl;
return 1;
}
事實證明 使用者如果不看代碼。他們不會知道自己看到的是個err。那麼這兩個對象的區別只是個習慣或約定嗎?我們同樣不能解釋。把它留著罷,相信總會“悟”的
第三, 我想談談那個“endl”,在很多教材裡把它等價於”/n”正確嗎?no,你可以寫下如下句子。
cout<<”aaa”;
a=getchar();//.假設a已經定義
cout<<a;
在VC6中你會發現輸入輸出的順序亂了(剛才在VC++.NET 2003又恢複正常了、奇怪。因此不建議在c++中用c的東西),為什麼呢?作者告訴我們endl除了/n的功能外還有個重新整理的功能,重新整理什嗎?看仔細點,重新整理緩衝區。什麼是緩衝區?哦。這個問題也許你需要一些別的知識,比如。《電腦群組成原理》
關於檔案的操作,與單檔案非常類似,唯一要注意的是流進出的參照物、記憶體?or 檔案?
筆記的最後,我還是要提醒大家。我提出了很多牛角尖的問題。只是對初學者的思考方法提出一些個人建議。對於這些問題本身有些並沒有討論價值。有些不是現在該解決的問題。在這節裡你的任務其實很簡單,搞清每個對象和運算子的作用。就是這樣,c++之父把c++說成難學易用的語言,我們可以理解這句話的涵義。要不斷的想起這句話,