整理日期 2002/01/31
我對讀者來信的回應與整理,一方面是自己留個記錄,一方面
竊自以為對其他讀者容或有點參考價值。所以依序整理下來。
為保障讀者隱私,所有來信一律隱其名,隱其址。曾經特別
囑咐我不要公開者, 當然也不予公開.

傳送日期: 2002年1月2日 PM 01:20

侯先生﹕
您好﹗首先祝您新年快樂﹗
我是中途上道的未來的程序員﹐今年23歲。看了您關於程序員學歷的文章﹐深有感觸﹐我雖然是本科畢業﹐但是我不是計算機專業的﹐更是文科畢業的。不過我熱愛編程這一職業﹐於是我在去年7月毅然辭去了工作﹐來到大連的雅奇電腦軟件信息工程學校(不知您有沒有聽說過)﹐進行為期一年的軟件工程學習。我這個學校vb、c++、vc、數據庫原理、sqlserver、算法與數據結構都教﹐我最感興趣的是c++與vc﹐於是我理所當然的去書店找這方面的好書﹐很對不住﹐我今年7月以前甚至還未仰您的大名﹐來到大連之後﹐經過同學和老師的推薦﹐我買了一本您翻譯的
《essential c++》﹐感到特別好﹐您不僅將語意翻譯正確﹐甚至行文風格都讓人感到非常舒服﹐於是我當然毫不猶豫購買了您所著或翻譯的幾乎所有市面上的書籍﹐當然還有一些您極力推薦的(很不幸的﹐《c++ primer》的簡體版我還沒有看到)。現在我已經在學習stl﹐又拜讀了您在《程序員》雜誌上刊登的有關文章﹐很是受益非淺。不過我很迷茫﹐我只是來這裡接受一年的學習而已﹐我怎麼才能夠在畢業後迅速進入崗位呢﹖或者我找工作也許很困難的﹐請您指點迷津﹐多謝﹗
對了﹐在《essential c++》這本書中﹐有關泛型編程那一章中﹐有一處似乎要經商榷﹐(我在網吧上網﹐
具體哪一頁不記得了)﹐原文是說c++編譯器能夠對已經定義但未賦值的整型變量默認賦初值為0﹐不過在vc++中﹐如果定義一個整型變量而沒有賦初值﹐則那個整型變量的值應該是個隨機值呀﹖可能這句話似乎些問題﹖
總之﹐我感到很幸福的是﹐剛學c++就能靠這麼多好書指點我走上正軌﹐而這正是先生您給予的﹐衷心感謝﹗
祝﹕新年快樂﹗
一個非常尊敬您的編程愛好者

●侯捷回覆:你未舉出哪一章哪一頁哪一行,我無法作答。提醒你,VC不是標準,不能心中只有VC。VC 在 C++ Standard 的表現,比較起來算是差勁的。Lippman 加盟 Microsoft 之後,矢志要加強這一部份,我們拭目以待 :)

「如何才能夠在畢業後迅速進入崗位呢」?我只能說,靠你自己多努力。永遠只有這句話。



傳送日期: 2002年1月2日 AM 05:14
候 sir:
我是才上大學的一名科班學生﹐由於在中學對計算機有一些了解﹐到大學來後感覺課程都很輕鬆﹐
我夢想成為一名像你這樣的大師級人物﹐但最近聽到不少這樣的傳聞 :

1.程序員沒意思﹐年紀大了就不行了﹐如果你不懂其他(如管理)之類﹐就該退休了。
2.國內計算機行業沒勁﹐氣氛不好﹐有本事的人不一定發揮得到它的特長﹐還是出國去吧﹐在大學只要學英語就ok了﹐計算機以後再學。
這些傳聞在系中引起不少反應﹐我想問老師﹐計算機行業的人才意味ぴ什麼﹐這是一門行業還是屬於科研基礎。
請老師對我們這樣才進入這門行業的人一點教導﹐幫我們指點迷津。

by the way 老師的書我拜讀不少﹐感受極深﹐希望老師再接再厲﹗

還有 祝老師新年快樂﹗

●侯捷回覆:我不是大師人物。真的,我對這種稱謂非常敏感,請不要再這麼說。

新竹交大(我的母校)計算機系,以前歸屬理學院(1972,計算機科學系),後歸屬工學院(1979,計算機工程學系),後又分展為資訊工程學系和資訊科學系(1988)。顯然,大家都在尋找 computer science 和 computer engineering 的定位和區隔。不過我告訴各位,這些歸屬或命名或定位,更多是人為的較勁、資源的重分配、聯招排名取巧的考量。經過如此「風風雨雨」,經過科技的進步,一般大眾對電腦的印象,已經從冷氣房內的驕客,轉變為日常家電用品。搞計算機的人,也從「科學家」變成了工程師。總的來說,一般大眾應該會認為計算機的工程性比科學性強些。

:新竹交大計算機系的前身可追朔自1958交大在台復校成立之電子研究所計算機組及1970年成立之計算機科學與控制工程學系

任何工程領域之前身(或背後),一定有其科學研究或尖端研究。即使 5000年歷史之civil engineering(土木工程),也有尖端研究(如何在月球上乃至太空中或火星表面蓋房子…)。因此,世界上有大量的計算機工程師,也有為數不少的計算機科學家。「計算機行業是一門行業還是屬於科研基礎」這樣的討論有什麼意義呢?沒有任何意義。

國內計算機行業沒勁﹐氣氛不好﹐有本事的人不一定發揮得到它的特長﹐還是出國去吧﹐在大學只要學英語就ok了﹐計算機以後再學」,唔,我雖不在內地生活,不知道計算機學習大環境,但你所說無論如何都不可能是對的。「大學只要學英語就ok了」?我的天!英語固然重要,專業領域的基礎訓練也極重要。如果你所處環境沒有好老師,你要自己想辦法找好書學習。




傳送日期: 2002年1月2日 PM 10:40
侯老師您好﹕
  我是大陸的一位讀者﹐看過您寫的《深入淺出MFC》和《深度探索C++對象模型》覺得受益非淺﹐雖然現在還不能完全理解其中的內容﹐但就已讀懂的內容也使自己編程理論水平有了很大的提高。非常感謝您。
  我的問題是﹕C++中把數據和對數據的操作進行封裝形成一個對象﹐可
為什麼一個對象的大小只和成員變量有關(在沒有virtual成員函數時)它的成員函數被存儲在什麼地方﹖是如何被調用的﹖如能得到您的指點將感激不盡。
祝:新年快樂
萬事如意

●侯捷回覆:《深度探索C++對象模型》對此說得很清楚。如果每個 object 之中都有 member function 實體存在,那麼當你產生 10000個 objects,就有10000份完全相同的member functions,那是一種不可忍受的浪費。

non-virtual member functions的調用情況一如 non-member function,virtual member functions 的調用情況則透過虛擬機制(vptr, vtable)完成,詳見《深度探索C++對象模型》。

 

 

傳送日期: 2002年1月3日 AM 01:58
侯捷你好:
最近讀了essential C++,對於它的觀念是漸漸有了。
但是每次讀到有錯誤的地方都會停頓下來,覺得奇怪卻又不確定是不是自己的問題。我想一本真正好的書應該避免有錯誤才行,這樣讀者的觀念才會清楚。尤其是在這種入門級的書籍,如此才不會有混淆的情況。
p69 L-13行寫 array從參數列消失了 但是看上文的函式宣告並無,我覺得宣告有錯。

●侯捷回覆:書上說「array 消失」,是指真正的 array 消失,不是指程式中的變數名稱 array 消失。我不翻譯 array 一詞,因為大陸稱它為數組,臺灣稱它為陣列,差別太大,乾脆不譯。array 是每個學習計算機技術的人都應該知道的名詞,保留原文術語,不會對任何人帶來困擾。

 

 

傳送日期: 2002年1月3日 PM 10:15
你好﹐我是中國--新疆--烏魯木齊的OOO. 一位用MFC的編程者[也是初學者].
我是你的一個新讀者﹕深入淺出MFC 的購買者。
近來遇到了問題:

引子:用SDI的結構對數據庫進行操作,數據庫裡只有一個字段,[學號],裡面存放的是學生學號, 對學號的操作無外有:--增加--刪除--及查詢,

---本人的設計想法是在菜單上-加上,增加,刪除,查詢,的菜單項,每用鼠標點擊菜單項時----回顯出相應的操作界面 ---[請注意最後一句].

問題:當我選查詢菜單項時,別的視圖[如增加視圖]會自動關閉,自動切換到相應視圖.

猜想: 是不是該用MDI 或是這個問題可簡化為---在SDI中如何關閉一個VIEW,切換到自己希望的VIEW.

--------
希望你能給我仔細的講解,越詳細越好,

---舉個例子,包含一個字段[用ACCESS創建數據庫]--學號,有增加,刪除,查詢的功能,最好.---注意每一個功能,都有相應的界面. 即一個數據庫對應多個視圖.

本人向您給予我的支持表示----中心感謝 !
---------此致敬禮.

●侯捷回覆:信中的態度和信末的敬禮,很難讓人連想在一起。


 

傳送日期: 2001年1月4日 AM 02:45
1月4日最新到電子書籍﹕
書籍名稱﹕《程序設計實踐》
書籍格式﹕ pdf格式
文件大小﹕ 8.4M
網頁鏈接﹕ ...
內容簡介﹕
本書是Brian W. Kernighan和Rob Pike合著的最新力作。本書從排錯
、測試、性能、可移植性、設計、界面、風格和記法等方面﹐討論了程
序設計中實際的、又是非常深刻和具有廣泛意義的思想、技術和方法﹐
它的翻譯出版將填補國內目前這方面書籍的空白。本書值得每個夢想並
努力使自己成為優秀程序員的人參考﹐值得每個計算機專業的學生和計
算機工作者閱讀﹐也可作為程序設計高級課程的教材或參考書。
●本站所有電子書籍均是免費下載
完全是為廣大"無產階級"的網友而共享
... 網站已經更新﹐快去瞧瞧有什麼好東東去下載吧。
... (本站每二天更新一次)
◎更多的電子書籍免費下載。
請訪問 ...(如連接不上請多試幾次)
我們相信一切東西都應是免費和共享的

●侯捷感想:共產別人,很簡單;把自己共產給別人,不容易。你把你的一切都拿出來和大家共享,你才有起碼的一點點立場說「我們相信一切東西都應是免費和共享的」。但即使你把你的一切都拿出來和大家共享,你也沒有資格要大家都和你一樣。

盜拷別人的東西,然後大剌剌地說我們相信一切東西都應是免費和共享的,就好像偷別人的財物,然後逢人便說「大家都來拿唷,我好慷慨唷」一樣,可恥。






居住省份(臺灣讀者請寫縣市): 台北市
對侯捷的建議: 市面上都買不到您的”多型與虛擬”大作的樣子

不知道是不是出版社不出版了
不知道您能不能再出版他
或是提供電子書讓我們下載,賣電子書也好….

侯老師在程式語言界一直是執牛耳的地位
不知道有沒有感受到國內軟體開發人才的欠缺
無法跟國外先進國家相比
不知道您有沒有什麼看法
或是覺得我們應該怎麼做
才能創造出下一個經濟奇蹟?

謝謝您提供《深入淺出MFC》這本電子書的下載!!

●侯捷回覆:《多型與虛擬》即將出第二版(可望於2002/03完成),所以不印第一版了。其中第6章及一個5000行的MFCLite3已開放。目前不賣電子書。








傳送日期: 2002年1月4日 AM 09:20
居住省份(臺灣讀者請寫縣市):雲林
對侯捷的建議:
侯捷,侯老師您好!!
我想稱你為老師應該是蠻恰當的,一直對你所翻譯或撰寫的書,一值都蠻有信心的,有相當的水準,然而,我以前常常有一個困擾在,如何學好C++,和windows程式設計,我也買了許多書,卻始終理不出頭緒,反而陷入一堆的名詞之中,直到最近為了解虛擬函數,去看了您的作品'虛擬與多型'之後,才慢慢了解,C++與C之間,程序導向以及物件導向之間的差別,因此,
我想老師您是否可以以一個簡單的方式,給我們這些程式設計的菜鳥一些指引,或map,guide,如學程式語言,必先學習語法,然而我想語法到了一定程度之後,就應該去掌握語言的特性,然後在反饋回來了解有哪些語法了解不夠,然後在進一步學習進階的東西,因為我覺得,以primer或是 the programming language
C++兌一個初學者來說太深了,可是,對一個半生不熟的,卻又不知哪些該過濾的人來說,非常的痛苦,那可否請老師,根據您的看法給一個指引呢??

●侯捷回覆:市面上有不少導入型書籍,或許它們沒有符合你的需求,所以你那麼說。我期許自己在高階技術領域上鑽研及寫譯,因為這個領域更迫切需要精神糧食。我了解初學者的痛苦,可侯捷一天只有 86400秒。


 

傳送日期: 2002年1月4日 AM 08:52
侯捷您好﹕
我是您的忠實讀者﹐您在大陸出版的書我全買並細心研讀。您在大陸行中提過整理資料的問題﹐但未提怎樣整理資料。我也download了一些資料﹐並沒有整理的概念﹐非常非常想指導您是如何和使用整理資料的。

●侯捷回覆:資料如何整理?主要就是在各種地方留下各種型式的 index。書籍有 index,你可以有你所擁有的書籍的index(如果你的書很多);硬碟很大,裡面資料很多,你應該對自己的硬碟有一套管理辦法。教外別傳,難以言傳,只能個人體會。如果你是我的入門弟子,隨時抓住機會具體問我,我便可能讓你更清楚一些。但要我在一個大而空泛的主題下寫一大篇文字,我實在沒有辦法。只要用心,人人都可以發展出一套最適合自己的辦法。


 

傳送日期: 2002年1月4日 PM 01:00
侯老師﹐您好﹗
也不知道您能不能看到這封信﹐不管怎樣﹐我的感受已經隨ぴ這封信寄了出去。
我是大陸您的一位忠實讀者﹐最近迷上了C++和Windows編程﹐看了您關於這方面許多經典書的評價﹐在華儲網上書店買了您的《Essential C++中文版》、《深度探索C++對象模型》、《深入淺出MFC第二版》等書﹐對於一個剛畢業的學生來說﹐這些書的價錢不算便宜﹐但是
買到手裡看了以後﹐就覺得這些書不應該用金錢來衡量﹐不但沒有後悔買了它們﹐還暗自慶幸幸虧沒有沒買﹐因為這些書確實能解開許多以前學習中的疑問﹐而且從您的譯書或者您自己的作品中﹐我能看出您是一位嚴謹求學、對讀者非常負責的人﹐所以非常喜歡買您的和您推薦的書(不會有受騙的感覺﹕P)﹐從心裡覺得這些書讓我在學習的路上少走了許多彎路。從您那裡讓我認識到﹐要學習一門學問﹐當你想買書的時候﹐就一定要買值得一看的、經典的書籍。從某方面來說﹐這些數不但教了你扎實的知識﹐更培養了你的學習興趣。
自從學了您的《Essential C++中文版》、《深度探索C++對象模型》之後﹐覺得只是掌握(根據我現在的水平﹐也許應該說大概其理解)了C++的主要內容﹐非常想對C++有一個全面的了解﹐於是我看到了您介紹的兩本C++經典名著﹕1. C++ Primer (3/e), Lippman/A.W./19982. The C++ Programming Language (3/e), Bjarne/A.W./1997 。

如果有一件我非常喜歡的衣服和一本我非常喜歡得書擺在我的面前讓我挑選﹐我一定會選擇那本書。知道了一本非常喜歡的書就很想得到﹐不然總是惦ぴ﹐非常難受。您也是愛讀書的人一定能理解我的感受。於是在華儲網上書店用“C++ Primer”、“Primer”、“The C++ Programming Language”、“Bjarne”等關鍵字查了N遍﹐只有一本“The C++ Programming Language”英文原版﹐我的英文水平離看原版書還有很大的距離(何況我的C++水平也不高)﹐所以目前只能望洋興嘆了。我知道您翻譯了 “C++ Primer”(真想有一本﹗)﹐但是不知道您翻譯了“The C++ Programming Language”沒有。
我想問您在我們這裡能不能買到您的繁體版書﹖也不是不想要簡體版的﹐就是怕不是您翻譯的﹐看了心裡不自在。
有時候很羨慕你們那裡的學生﹐能有一位像您這樣的老師﹐在我們這裡﹐想買一本像樣的C++和Windows編程的書都難﹐只能借ぴ您的書評過過隱了﹗﹗
最近我又訂了一本北京大學譯的《Windows 95程序設計》(看了您的書評)。

致禮﹗
遼寧營口

●侯捷回覆:你對書籍的態度已經使你走上了一條好的道路。2001年大陸引進了許多外版好書,有中譯本,有影印本,對好學讀者是一個大好消息。

CSDN上有《C++ Primer 3e》侯捷譯本的郵購服務。這是我所知道的唯一大陸購買管道。

 

 

 

傳送日期: 2002年1月4日 PM 01:15
親愛的候老師﹕
我是一名來自祖國大陸的您眾多寫譯圖書的讀者﹐首先我向您致以誠摯的節日祝福﹐祝您以及全家元旦快樂﹐祝您新的一年裡工作順利﹐寫譯出更多、更好的圖書以造福廣大程序員朋友和莘莘學子。
我于近日下載了您的力作《多型與虛擬》的開放部份電子版﹐但是
我發現您的MFCLite3.0的源代碼中的中文註釋為亂碼﹐懇請候老師以後在開放電子圖書附書源代碼時能夠考慮大陸讀者的情況﹐于您簡體中文網站上公佈時﹐務必轉換為GB碼。給您添亂了﹗
此致
最崇高的敬禮﹗(您寫的TASS實在是很棒﹐能不能多開放幾章﹖很貪心的要求﹖﹗)
金陵

●侯捷回覆:好的。《多型與虛擬》2e轉譯為簡體時,會把書中所有程式(包括MFCLite3)的註解轉譯為簡體。我已開放MFCLite3的 html 版本,應可在CSDN簡體鏡站上順利轉譯為GB碼。.cpp 和 .h 未轉碼,你可找個轉碼工具自行轉換(網上多的是這種轉碼工具,很多是 freeware 或 shareware)。

至於TASS, 已開放半本,不能再開放了。



傳送日期: 2002年1月5日 AM 11:02
主旨: 向侯捷先生致敬
尊敬的侯捷先生:您好!
以下是本人的一些資料:
居住省份:云南
對侯捷的建議:暫無。
最后,對先生以及先生的文字表示深深的謝意。撇開技朮不談,光是先生文中濃濃的人文關懷精神便已令人溫暖、受益。
祝:身體健康 工作順利

 

 

傳送日期: 2002年1月5日 PM 04:00
侯捷前輩,
你好,很不好意思打擾你.
我是一名大一的學生,學的專業是自動化,但進大學後卻對計算機非常感興趣.於是我就買了許多的計算機方面 的書來看,但苦于沒有良師指導,就像沒有方向的船,沒有多大進步.
昨天買了2001年的程序員合訂本,終於看到了您的文章,很興奮.
我現在的基礎還不行,基本是那種剛剛脫盲的.我想向您請教,
如果想做一個很好的程序員,應該怎樣一步一步的去走.我自己也有一點看法,請你指教.我的想法是,首先要學原理,先把計算機系統結構弄清楚;再就是學習彙編語言,學習數據結構,學習高級語言,然後再學習軟件工程方面的內容,最後還要學習網絡,學習網絡語言.
我等待你的諄諄教誨
一個計算機愛好者
您的崇拜者

●侯捷回覆:你的想法不錯。有些東西要看你將來怎麼走,再決定要不要鑽研進去。例如 彙編語言(assembly language)、計算機系統結構、軟件工程、網絡…,並非每個人都必須學習。

 

 

傳送日期: 2002年1月5日 PM 04:20
候大哥﹐你好。我正在攻讀《ESSENTIAL C++》﹐因為自己資質愚鈍﹐看的速度很慢﹐做題也遇很多?題﹐麻煩你指點一下。
在??1.5中﹐?我用C-STYLE做的時候﹐發現STRLEN函數返回的值和字符串實際的長度有出入﹐這和我用VC6有關系嗎﹐還是別的原因﹖
另外﹐在這題的答案中?用戶輸入的名字字符數為零時會返回提示信息﹐但我發覺用戶必需要輸入起碼一個以上的字符﹐程序才能繼續﹐能這種字符數為零的情況有可能發生嗎﹖
對不起﹐說的很亂﹐希望候大哥能給予答復。





傳送日期: 2002年1月5日 PM 05:06
侯捷 您好!
本人在閱讀您的譯著Essential C++簡體中文版 Page 105, Line 12 關於default constructor的譯注我認為不太妥當,無需任何參數的constructor是default constructor,但是default constructor卻不一定沒有參數(例如帶有默認參數的constructor),我認為default constructor最好理解為在調用時可以不帶參數的constructor,您的註解容易讓讀者產生誤解,不知您認為如何?

●侯捷回覆:你的說法很完整。

 

 


----- Original Message -----
傳送日期: 2002年1月5日 PM 07:04
主旨: 感謝您的大作《深入淺出MFC》2/e
居住省份(如是臺灣讀者,請寫縣市):台北縣蘆洲市
對侯捷的建議:
侯老師:
非常感謝您的大作《深入淺出MFC》2/e ,也感謝您願意公開電子書,我看了第0章,覺得受益良多,
我有一個建議,同時也是問題:您對於類似Borland C++ Builder 的 RAD tool的看法如何?有沒有可能為這類型工具作深入的介紹?

最後,再一次感謝您,我本來一直以為,像MFC這類的書,大概是以英文書為主(尤其是微軟),但是看了您的書之後,讓我的想法改變了,
希望有一天能夠看到您的書發行英文版,進軍國際舞台
祝 平安

●侯捷回覆:RAD很好,但RAD使用者需有正確的認識:仍然需要對基礎原理做相當程度的理解。RAD是軟體開發的好幫手,但若使用者無良好基礎,無法良好駕馭這種高層次工具。

我沒有撰寫Borland C++ Builder書籍的計劃,很大的因素是,我研究的是核心(相信你希望我寫的也是核心),而Borland C++ Builder的核心 VCL 以 object pascal 寫就,這不影響它的功能和用途,卻影響我的興趣。目前我正撥一些時間研究 Qt,它跨平台,我對它的訊息機制很感興趣。

 

 

傳送日期: 2002年1月5日 PM 08:22
侯先生﹕您好。

先是在一本《Essential C++》上認識了您﹐然後又在《程序員》雜誌閱讀了您的多篇高論﹐真是受益匪淺。不過﹐對於您的書籍的簡體中文版的翻譯﹐我覺得您可以再斟酌斟酌。

首先﹐咱們還是先舉例吧﹕

Type (型別)﹕老實說﹐這是我最有意見的選詞。作為一個年屆三十、接觸C++已經十多年的人﹐以前我從來沒有見過這個說法﹐而現在也覺得這個詞極為拗口。若不是在您的個人網站上找到一份編程術語對照﹐幾乎現在就想不起您的這個詞是怎麼說的了。“類型”這個詞再有種種不是﹐在大陸也已經是一種定譯了﹔何況﹐正如 Johnson 博士所說﹐“Every language has its anomalies, which, though inconvenient, and in themselves once unnecessary, must be tolerated among the imperfections of human things”。您又何必用這樣一個“特別”的詞來讓大陸的讀者腦筋多轉彎呢﹖

Instance (實體)﹕不算拗口﹐但更改大陸的定譯“實例”似乎沒有必要。在程序界中﹐我不認為有人在技術文章中見到這個詞還會想起它的本意。動詞“實例化”也已經成為定譯。而且﹐“實體”這一詞在大陸通常與英文 entity 相對應。

Paradigm (模式)﹕易與 Pattern 混淆。建議採用科學學中的定譯“范式”。

引號的使用﹕這屬於風格問題﹐很難評判。我只能說﹐我個人的意見以為像大陸版的《設計模式》中這樣較忠實于原文、少用引號的翻譯我更喜歡些。畢竟﹐原文並沒有這麼多強調﹐引號帶來的強調感跟原文語感還是有區別的。

聲明一下﹐我認為您的中文功底相當深厚﹐您的幾篇非技術的漫談我是很喜歡看的。竊以為﹐
之所以我們會有不同意見﹐主要源自兩岸語文習慣的不同。正因為如此﹐才需要更多的交流。既然您在出版簡體中文的版本﹐總得照顧大陸的習慣吧。

如言語有任何不妥之處﹐還請侯先生不吝指正。

●侯捷回覆:我的書籍(不論著作或譯作)的簡體版,都是由大陸譯者將繁體版轉譯過去。這麼做有絕對必要,因為侯捷無法精準掌握大陸日常用語和技術用語。我定了少量幾個絕對必須遵守的原則,其它都由轉譯者自己掌控發揮。

對於你說的一切,我都沒有意見(此中並無負面情緒,是真的沒有意見)。很多時候,我的譯法或我的看法,被斷章取義或被扭曲,我也無由一一駁正。例如你上面說的,paradigm譯為模式,我絕不會這麼譯,一定有其上下文脈絡;pattern,我也不會譯為「模式」,我會譯為「樣式」。你把大陸譯詞和侯捷譯詞混在一起,當然處處滯礙了。

如你所說,許多問題源自兩岸語文習慣的不同,大家彼此調適共同努力。我也在改變之中 :)

 


傳送日期: 2002年1月6日 AM 12:36
侯老師您好,您寫的書真是太優秀了,願 上帝耶穌基督大大的祝福您;
  學生正讀大學三年級,有一天看到了com這個奇怪的名詞,對此發生了好奇心,於是乎借了許多的書來看,但是真的如您於關於資訊焦慮症的一篇文章中所說,真是

愈是用功,愈是焚膏繼晷地頻繁接觸這個世界,你愈是會得資訊焦慮症。懵懵懂懂的人反倒過的輕鬆快樂。  

就在近乎快要放棄的當頭,感謝主,竟然讓我發現了您的大作─
虛擬及多型,真是如大旱之望雲霓,讓我愛不釋手,我花了一個禮拜日夜不停的讀,所有功課都先把他擺一邊,總算讀完您的大作,心中豁然開朗;先前,曾經讀過Inside com的中譯本,但總不知是怎麼回事,程式為何要如此做;但現在學生雖智識淺薄,但也能大概知道一些如C++物件模型大概是什麼,虛擬及多型中之vptr及vtbl等的概念,還有關於type casting尤其是dynamic_cast運算子的的細節介紹,此處真的讓學生混亂的觀念,得以釐清,這真真……是太棒了;

到了第六章From Com to Com,學生真的要再次大大的感謝 主耶穌基督,能夠非常幸運的讀到您的文章,總算才知道為何Inside Com中的內容的know why,真是要再次非常的謝謝您,願上帝大大的祝福您。

學生非常喜歡您的文章,並已經將其摘要寄給全班同學;在此學生將摘要寄給您,願您能撥冗過目;耽誤您許多的時間,望您原諒;在此學生再次敬祝

身體更加健康,讓眾多學子,更能有好書來充實寶貴的知識;並願 主耶穌基督保守您闔家更加平安;謝謝您

●侯捷回覆:我了解撥雲見日水落石出的快樂。這是我走教育這條路的動力。我了解你的快樂 :)

 

 

傳送日期: 2002年1月6日 PM 01:13
尊敬的侯教授﹕
  我是您《深入淺出MFC》的讀者﹐很早以前就想學習VC++平臺的開發方法﹐但VC++固有的特點﹐讓我感到很難﹐搞不清MFC的結構﹐不知道怎麼進行可視化開發﹐比起學VB來﹐難多了。
  我一位在深圳工作的朋友向我推薦了您的《深入淺出MFC》﹐我當時就立刻一書店定了一本﹐拿到那厚厚的書﹐感覺我一定能學會的﹗我昨天才開始拜讀您的大作﹐感覺很好﹐是學習MFC的好書﹗
  感謝您提供了本書的電子圖書﹐不知道您的書會讓中國多出多少程序員、軟件工程師﹗
居住省份(台灣讀者請寫縣市)﹕中國 四川 成都
對侯捷的建議﹕
  萬分感謝您能推出關於VC++7.0的書籍﹗
  萬分感謝您的《深入淺出MFC》﹗

●侯捷回覆:我已看過MFC7源碼,正評估《深入淺出MFC》3e。目前尚無時間表。





傳送日期: 2002年1月6日 PM 07:06
侯捷老師﹕
你好﹐前幾年看過你的第一版MFC很好﹐後來自己買了一本第二版。不過最近看的資料﹐MICROSOFT要發佈VISUAL STUDIO.net﹐
它把所有的語言都統一了起來﹐那就意味ぴMFC快被淘汰﹐我想就這問題請教一下。

●侯捷回覆:相信你已發現,你的話說得過早。MFC 並未被淘汰,它在 Visual Studio.NET 的 VC7 中活得很好,也有了一些加強。

也許你不知道業界工程師的心情。最近我徵詢好幾位業界朋友(他們都使用 VC++ 開發系統層級的軟體),他們對 Visual Studio.NET 的 C#, .NET framework 的推出,態度可用一句話形容:漠不關心。他們唯一關心的是 VC7 的相容性。這種心情可以理解,業界要的是持續穩定,如果你在某個開發環境上發展了許多產品,你最關心的便是保證你的投資和保持你的優勢。這也是一個負責任的工具廠商必須永銘心中的。世上已有許多重量級軟體以MFC開發而成,如果某天微軟不再支援MFC,或新版MFC沒有良好的回溯相容,這些很有份量的應用軟體大廠會不會剝了微軟的皮?被剝了皮的微軟,雖然存活依舊,從此落了個回溯相容性不佳的臭名,這對工具廠商無疑是個致命傷 — 誰敢用隨時可能改朝換代的工具?

世界當然要前進。演化(evolution)的代價最小。演化無法讓大家滿足的時候,就發生革命(revolution)。MFC 顯然還有相當壽命。但當它引退的那天到來,我也不意外。MFC的引退如何才能不引起業界反彈,其後繼產品如何保持最佳相容性,在在考驗微軟的智慧。一旦某天 C# 有了極強大的勢力(這是微軟的盼望),或多數大廠一如微軟所冀望地逐漸改採
C# and .NET framework 做為開發平台,微軟便可進行
強勢引導

前面我所說的,是「以 VC++ 開發系統層級軟體」的一些業界朋友的態度。其他領域或其他狀況的業界朋友,有可能對 Visual Studio.NET 的 C#, Visual Basic.NET...抱持很大興趣或期待。總之,這是一場勢力拉鋸。誰手上的籌碼充足,誰就說話大聲;誰有壓倒性籌碼,誰就可以有壓倒性作為;誰因為壓倒性勝利而腐化,誰就成為下一個被推翻的對象。合縱連橫,策略權謀,分久必合,合久必分,世道其中矣。單純以技術優劣來評論天下,都太過單純。豈不聞「富不過三代」?正因富者的驕縱、奢華、承平貪歡,因為貧者的勤奮、檢約、秣馬厲兵,使雙方有了地位拉近、甚至角色互換的機會。

拿人世道理看業界發展,使我可以自在高吟「隆中對」。





傳送日期: 2002年1月7日 AM 09:57
侯老師您好:
我原本是念生物科系,對程式設計十分有興趣,一年前自學C++,主要參考的書目都是您的著作,當我遇上問題時,這些書都能適時將我的問題迎刃而解,至今仍是我不可缺少的案頭書。
我目前服務於某生物科技公司的生物資訊部門,這個部門主要是分析一些實驗數據,或者利用一些演算法預測DNA的結構,下面是我的基本資料:
台北市人

●侯捷回覆:生化 + 電腦,你集兩大科技焦點於一身 :)

 


傳送日期: 2002年1月7日 AM 09:46
主旨: C++ Primer exception 的疑問
> Hi 侯捷!
>
> 研讀您的
C++ Primer中文版第11章異常處理時,產生一個疑惑,希能得到您的指導。
>
> 如以下例子:
>
> void fun_a(void){
>   try{
>      //do some things
>      fun_b();
>   }
>   catch(excep
&e){
>     //do some things to e
>    
throw;
>   }
> }
>
> void fun_b(void){
>   //do some thing
>   if( /*...*/)
>       throw excep();
> }
>
> 依11.3.3節所言,如果我要將fun_b所丟出的exception在fun_a的catch裡做一些修
> 改,那麼在fun_a裡catch子句中的exception declaration必須宣告一個reference。
>
> 但依照object的生命時間來看,一個在fun_b中所產生的exception(object),在fun_b
> 結束時(也許是因為exception),這個被產生於fun_b scope裡的exception(object)也
> 應該要結束,那麼fun_a裡catch的&e所參考的exception(object)不就不可預期了嗎?

●侯捷回覆:在某個 scope 內產生的 objects,不見得一定會(或一定必須)在該 scope 結束之際結束其生命。

想想看,heap objects 不就是如此嗎?

所以,可以推想,throw 所產生的 exception object 必然是個 heap object。我說「推想」,因為此刻我無法明確找出《C++ Primer》哪一頁告訴我們這個概念。不過你要知道,exception object一定得在函式丟出 exception 之後繼續存活,所以它一定得是個 heap object。

 

 

 

傳送日期: 2002年1月7日 AM 11:52
侯老師﹐您好
咱們就免去客套了。(以下刪去感想一千三百字)

您的演講中﹐提到翻譯的例子﹕
1)

原文﹕Delegation is a good design choice only when it simplifies more than it complicates.
原譯﹕只有當委託使設計比較簡單而不是更複雜時﹐它才是好的選擇。
侯譯﹕只有當 delegation 簡化了設計﹐它才值得被我們選用。


您的譯文確實好。從忠實原文的角度看﹐“簡化了設計”說成“確實簡化了設計”這類詞是不是更好一點﹖(用詞可能不恰當。是想用這類詞﹐再強調一下簡化)

2)

原文﹕To achieve the same effect with delegation, the receiver passes itself to the delegate to let the delegated operation refer to the receiver.
原譯﹕委託方式為了得到同樣的效果﹐接受請求的對象將自己傳給被委託者(代理人)﹐使被委託的操作可以引用接受請求的對象。
侯譯﹕為了以委託方式獲得相同效果﹐「請託(request)受理者」將自己傳給被委託人﹐使自己得以讓「被委託之操作行為」取用。
我最希望的譯法是﹕
為了以 delegation 獲得相同效果﹐receiver 將自己傳給 delegate ﹐使自己得以被 delegated operation 取用。

您說得非常好﹐佩服。其中最後一句“使自己得以被...取用”。“得以”二字是否可以去掉﹖

二個用詞可能都有兩岸習慣的差異﹐因此學生我從理論和實際二個角度都感到沒把握。望指正。

●侯捷回覆:我所說的,只是我的看法。我的看法不是教科書。不同的譯法,我沒有意見。你所提都是很小的點,不必如此戒慎恐懼 :)。人各有體,無關正誤。你的文字成就你的個人風格,你的個人風格成就你的個人魅力。

BTW,有一種說法:不希望在技術書籍中看到任何個人風格。這很可笑。文如其人,言為心聲,說話寫字自然就是一個人的風格。除非是機器寫字,機器說話。就算機器,不同的機器也會反映出設計者的不同風格。

 

 


傳送日期: 2002年1月7日 PM 01:26
HI~~ JJHou:
謝謝你.
目前我已經找到一份程式設計的工作,可以暫時避免失業的痛苦. ;p
雖然原先希望可以到一些大的軟體公司去學習, 不過景氣不好,人事都凍結了. 所以就先藉機累積一些實務的經驗,等有機會的時候再去試試看了,

時常上網去檢閱你的網站,發現到你這兩年常去外地講學, 想必這是一個很不錯的經驗. 可以和不同的人分享自己的看法, 了解技術水準之間的差異. 不過相對上你[出書]的速度就受到了影響. 許多原先計劃的書籍都延到2002年了.

你的書籍不曉得在美國是否有代理商? 很希望能擁有你最近從事撰寫的書籍, 如STL 源碼剖析, The C++ standard library. 正如我以前所認為的, 即使自己有能力閱讀第一手的原文著作, 但是再讀過你的譯著後往往會看見一些以前所沒有看見的東西. 或者可以用很快的速度了解一本書的內容。 以前託朋友在台灣買來再寄給我,但如果可以再la這一帶直接買的話,也就省掉了一些麻煩。

源碼剖析,一直是CS人避免不掉的一項考驗. 撰寫成書的往往是那些使用人口最多的東西。但很多時候從事的工作根本沒有書籍可以閱讀,需要直接trace source code或是閱讀一些現成的程式碼。即使有註解,可是往往還是會陷落到層層的source code中找不著出路。 所以我蠻有興趣看看 源碼剖析 這本書,了解你們是用哪些方式,角度進行這件困難的工作。 所以如果有中譯本的話,我就可以花較短的時間知道我想知道的東西了。

新的工作內容,可能跟Win32 Multithread programming有關,除了你之前那本[multithreading application in Win32]之外, 是否還有值得閱讀的書籍呢?

Well..... 希望新的一年中,你的寫作工作能夠很順利, 也能介紹更多的好書讓大家曉得.

●侯捷回覆:「你的書籍不曉得在美國是否有代理商」,想必沒有吧。恐怕只能通過郵購。threading 相關書籍很多,各擅勝場,中譯本似乎只有我譯的那本《Win32 多緒程式設計》。





傳送日期: 2002年1月7日 PM 06:02
侯老師你好:
很抱歉再你百忙之中還寫信打攪你,真的很抱歉,我相信你一定接到許多讀者問一些"書上明明寫的清清楚楚"的問題,但我還是要臉著臉皮,問幾個問題
因為沒人可問,有些觀念都是讀完後自己猜測的,危疑不定,覺得很危險,所以還是想打攪你,真抱歉,你可以告訴我我的觀念對不對或哪裡可以找到參考資料就行了,謝謝

以下問題的環境為vc++ 5.0版,參考書籍為c++ primer

第一個問題是

#include <iostream.h>
//using namespace std; //加上此行則無法編譯
int main(){
cout<<"hello"<<endl;
return 0;
}
_____________________________________________________________
#include <iostream>
using namespace std; //加上此行才可編譯
int main(){
cout<<"hello"<<endl;
return 0;
}

想請問的是 iostream.h 是 libery c 廠商所提供的,所以不需要using directive,
而iostream 是 c++ libery 囉, 那這iostream.h 是不是 libery c 廠商在表頭檔中加了某些常數所以才不用using directive,

我這樣說正確嗎??

-------------------------------------------------------------------------------------------------------------------------------------------

還有一個問題 我在 console mode 中使用 C/C++ 編譯器
#include <iostream>
using namespace std;
int main(){

  int *a=new int(10); //造一各int指標
  cout<<"*a: "<<*a<<" a: "<<a<<endl;

  delete a; //殺死他

  (*a)++; //

  cout<<"*a: "<<*a<<" a: "<<a<<endl; //印出來可以用(他還活著???)

  return 0;
}

列印結果

*a: 10 a: 00770730
*a: 11 a: 00770730

但若是在vc整合環境(IDE)中。

列印結果

*a: 10 a: 00770730
*a: -572662306 a: 00770730

請問a的那塊memory被釋放了嗎?????
我的想法是a在vc整合環境(IDE)中被釋放了,可是在console mode 中也是被釋放了只是還沒有被覆蓋過
....還是編譯器的問題呢(這是我最不願意懷疑的)!?
-------------------------------------------------------------------------------------------------------------------------------------------

還有一個問題喔
第12章介紹泛型演算法

演算法和function object是怎麼產生關聯的???

如(p.578)
有一function object

class less_then {
public:
bool operator()(const string & s1,const string &s2)
{ return s1.size()<s2.size();}
};

......
string sa[10]=......... //
vector<string>text(sa,sa+10); //建立一個container,型別為string
............
stable_sort(text.begin(),text.end(),less_then()); //進行排序

此為一簡單例子
我想問的是此演算法stable_sort如何運用此function object (less_then) ,class less_then 被用時 又沒有看到引數
難道是stable_sort在定義時就有會自己使用function object用嗎?

可是stable_sort的函式原型看不到任何需要的bool型態呀???

template<class BidIt, class Pred>
void stable_sort(BidIt first, BidIt last, Pred pr);

這只是一例,
還有很多演算法莫名其妙的就用了function object,我知道很好用,可是不曉得怎摸用,更不曉得原理,只靠complier在編譯行不行來猜
真的很痛苦,也很危險.
侯老師可否介紹一些資料,謝謝

●侯捷回覆:第一個問題關於 using directive,書上說得很清楚。看書。

第二個問題關於 delete,記憶體已被釋放,但系統只是加個邏輯標記。程式如果繼續存取它,還是存取得到,只是結果無可預期。一旦它真的被系統拿去供應給其他 request,你就會有大麻煩。

第三個問題關於function object,題目很大,無法在此空中教學。看書。演算法絕不會莫名其妙的就用了function object。《STL源碼剖析》、《泛型程式設計與STL》、《C++ 標準程式庫》可以在不同層次幫助你。

 

 

 

傳送日期: 2002年1月7日 PM 07:50
侯老師﹐我是一剛學c++的學生﹐把一本入門書看完了﹐也沒寫程序﹐我不知道下一步該學更好的c++書呢﹐還是去看VC++。

一方面﹐我對前者還未弄懂﹐想繼續學習﹐但半年後要進入社會去寫程序﹐好像又該去學後者才對(我的師兄說我們要用VC++)﹐不知您能否百忙中指點一二﹖

另外
您說您不願告訴別人該看那本書﹐因為那得讀書者自己去決定﹐但我還是希望您能對二者都推薦一些書給我﹐否則我可能會在走了彎路後再去麻煩你。

我的同學都對您很是佩服﹐蠻撞地給您寫信但求您能給我輩指一條通向能熟練編程的道路﹐打攪之處還請您老多多原諒﹗

不勝感激﹗﹗

此致敬禮

●侯捷回覆:我如果不願告訴別人該看那本書,就不會寫那麼多書評。書評都在侯捷網站上。我無法為每一個人寫一遍推薦。





傳送日期: 2002年1月7日 PM 09:50
侯先生﹕
你好﹐我是大陸的讀者。我讀過先生的深入淺出mfc﹐非常欣賞先生的文章﹐更加欽佩先生的為人。在下現在忙於驅動程序的編寫﹐希望先生能推薦幾本書﹐不勝感激。
您忠實的讀者

●侯捷回覆:這種問法表示你的正確觀念尚未建立。不同平台(作業系統)的驅動程式,概念與寫法完全不同,你問哪一種平台?如果是Windows 平台,利用搜尋引擎找 Walter Oney 這個人便是。

 


傳送日期: 2002年1月8日 AM 08:52
候先生﹕您好。
正在拜讀您的譯作深入探索C++對象模型。讀到其中第三章“Data語意學”﹐對於其中的pp 130和pp 133的內容稍有建議。用一個直接顯示偏移的宏offset計算成員變量比直接使用&運算符取地址看到的結果更清楚﹐更直接的反映了lippman的意思。不知道候先生議下如何﹖

 

 

傳送日期: 2002年1月8日 PM 12:57

侯捷先生:
您好!我這個星期看了一個程序是"PING一個IP地址(向它發送一個數據包並等待回應)",裡面用了幾個API函數,我不會用這些函數,API函數的書我也查了很多,但查不到,希望您能幫我解決這些問題,這些函數是:
Public Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Public Declare Function IcmpCloseHandle Lib "icmp.dll" _
(ByVal IcmpHandle As Long) As Long

Public Declare Function IcmpSendEcho Lib "icmp.dll" _
(ByVal IcmpHandle As Long, _
ByVal DestinationAddress As Long, _
ByVal RequestData As String, _
ByVal RequestSize As Integer, _
ByVal RequestOptions As Long, _
ReplyBuffer As ICMP_ECHO_REPLY, _
ByVal ReplySize As Long, _
ByVal Timeout As Long) As Long

Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long

Public Declare Function WSAStartup Lib "WSOCK32.DLL" ! _
(ByVal wVersionRequired As Long, _
lpWSADATA As WSADATA) As Long

Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Public Declare Function gethostname Lib "WSOCK32.DLL" _
(ByVal szHost As String, _
ByVal dwHostLen As Long) As Long

Public Declare Function gethostbyname Lib "WSOCK32.DLL" _
(ByVal szHost As String) As Long

Public Declare Sub RtlMoveMemory Lib "kernel32" _
(hpvDest As Any, _
ByVal hpvSource As Long, _
ByVal cbCopy As Long)

特別是IcmpCreateFile、IcmpCloseHandle、IcmpSendEcho這些函數我連個影都找不ぴ﹐我迫切的
希望您能幫我詳細的說明上面所有函數的用法及其參數的使用說明﹐最好詳細一點(因為我很笨)。順便提一下﹐我的開發工具是VB
急盼佳音
! Thanks



 

傳送日期: 2002年1月8日 PM 07:37
侯老師﹕你好﹗
接觸了windows編程第一個使我不理解的概念就是“句柄”﹐請問應怎麼理解﹖還有什麼宏定義的“消息”﹐它們的原形是什麼﹖如果你一口氣介紹不完的話﹐能否介紹我什麼書能詳細介紹它﹖謝謝﹗

●侯捷回覆:有這種疑惑,表示你還欠缺 win32 API(SDK) programming 基礎。找  Charles Petzold 的《Programming Windows》來看,就對了。規模小一點的,可看《深入淺出MFC》2e第一章。

 





傳送日期: 2002年1月8日 PM 08:47
侯老師﹕您好﹗
我是讀了你在csdn雜誌上的文章﹐才知道你﹐認識你﹐開始了解你﹐了解了你治學﹐對人的態度﹐覺得你是一個很誠懇而有嚴謹的人﹐我十分敬佩﹗對於您淵博的學識﹐我十分羨慕﹗
做為一個初學者﹐我有問題向您討教﹗
1.數據庫/數據庫開發語言和c/c++能同步學嗎﹖會相互影響嗎﹖
2.你推薦的c++/oop的書--lippman98,struostrup97在那才能買到(大陸)﹖
3.作為一個非科班﹐非名校的信息管理專業(專業方向-數據庫的開發)的學生學c/c++或者說去搞編程﹐這樣好嗎﹖
很抱歉﹐侯老師﹐我是個初學者﹐可能思想存在問題﹐看法有問題﹐觀念有問題﹐望能原諒﹐並給予更正﹗﹗

●侯捷回覆:
(1)
數據庫/數據庫開發語言?你是指 SQL 嗎?它和 C/C++無任何關連,不互相影響。
(2)
...在那才能買到(大陸)﹖我並不住在大陸 :)
(3) ...
這樣好嗎﹖不錯。


 

傳送日期: 2002年1月8日 PM 09:10
主旨: Maybe a mistake in Effective C++
Dear Hou:
I'm a reader of yours and start to read
Effective C++ 2nd Edition which you have translated into Chinese.
In the Perface, the author say:

String s1;
String s2("Hello");
String s3=s2; // initialization
s1=s3;

but
I wonder "String s3=s2" is an assignment. So I checked it with VC++ 6.0 like this

class String
{
public:
  String();
  String(const char *rhs);
  virtual ~String();

private:
  char *data;
};

String::String(const char *value)
{
  if(value)
  {
    data=new char[strlen(value)+1];
    strcpy(data, value);
  }
  else
  {
    data=new char[1];
    *data='\0';
  }
}

and than, use String like this:

String s1;
String s2("Hello");
String s3=s2;

The result show that s2.data and s3.data point to the same memory.Which means the
copy constructor doesn't called.
I think this maybe a mistake in Effective C++. Do you agree with me? Or can you let me how to explain it if you don't agree.

Thanks
Eric

●侯捷回覆:你得好好複習 copy constructor 的寫法。你根本沒寫出 copy constructor,所以 String s3=s2; 喚起的是 default copy constructor,進行 bitwise copy,導致 s2.data and s3.data point to the same memory。copy ctor的形式如下:

String::String(const String& rhs)   // copy ctor
{
   cout << "copy ctor" << endl;   
}

現在,String s3=s2; 會導致螢幕上出現 "copy ctor" 字樣,並且 s2.data 和 s3.data 的位址將不相同。

 

 

傳送日期: 2002年1月8日 PM 11:00
> 侯捷先生﹐您好﹗
>
> 首先感謝您帶給我們這麼一件極品---深入淺出MFC.
> 我今天上午有幸買到了2001年12月第八次印刷的 《深入淺出 MFC》2/e 簡體版.
> 勘誤表中宣稱以下部份在此次印刷中已糾正﹐但並非如此.
> 因此請問,是勘誤表有問題﹐還是出版社忘記修改了.
> p344, 方框以下第一段

●侯捷回覆:謝謝您的來信通知。勘誤表上是正確資訊。我想如果不是我很晚才加上去而編輯沒來得及注意到,那麼就是編輯不小心遺漏了這項修改。

已將這封信轉給華中出版社編輯。我相信他們會在新刷中修正好。非常感謝您。


 

傳送日期: 2002年1月9日 AM 09:26
居住省份﹕江蘇省南京
建議﹕我是一名剛從學校畢業走上工作崗位的學生﹐在校時學過C++﹐但在工作中的開發環境是VC﹐對VC還不是很熟悉﹐但實際工作中不允許我花太多的時間去仔細學習它﹐我想
請侯捷先生能否對我學習方法提出一點建議。謝謝﹗

●侯捷回覆:找一本(或多本)好書。書評見侯捷網站。

 

 

 

傳送日期: 2002年1月9日 PM 04:44
侯老師﹕
我一直是學習c++以及在vc++上編程的“狂人分子”但最近聽別人說什麼delphi會取代什麼vc++﹐索性自己也由於好奇做了幾個delphi的程序確實覺得上手比較的容易﹐而且週期特別的短﹐也看了相關的資料──有的則說delphi能達到vc++的層次和水平﹐當然我學delphi也沒有太長的時間可能對delphi 的了解不是太徹底﹐本人想請教侯老師﹐您對此問題是怎麼看待的﹖也就是
非得在二者比個高低(delphi&vc++)在綜合的評測中到底哪個能略勝一籌呢﹖
本人自問對編程愛好頗濃﹐也算讀書有幾﹐但可能生性好動﹐多機變﹐不善長坐。對自己管束不當﹐實是長進緩慢﹐靜請侯老師對鄙人言傳身教進以苦苦良言﹗﹗鄙人一定恭聽﹗
然本人妄不是胸無點墨之輩﹐其猶以候老師之c++的諸多譯做貢獻良多﹗﹗在此謝謝前輩。
大陸北方小城(吉林市)
您的忠實聽眾斗膽﹗

●侯捷回覆:我沒有資格對 VC++ & Delphi 做評比,因為我對 VC++ 的熟悉遠遠超過我對Delphi 的熟悉。此外,我也沒有興趣評比優劣。我唯一可能寫的評比文章,只會列出事實,不會給出高下,高下由讀者自己評斷。事實上這類工具發展到今天如此精良、各有所長的地步,我認為,只有適用與否,沒有高下可言。


 

傳送日期: 2002年1月9日 PM 05:34
候老師﹐您好﹗
   拜讀了您的一些書籍﹐受益不少﹗在此表示非常的感謝﹗﹕)
學生有2個不解的問題﹐煩老師在百忙中能夠給個解答﹗謝謝

1 為什麼用VC自帶的<map>聲明任何一個model都會有一大堆warnings
2 用sgi的STL沒有warning﹐可是在我寫的程序裡出現在memory leak

學生在寫一個DirectDraw的程序﹐其中用到了STL的map。具體定義如下﹕
typedef struct _ACTION
{
LPDIRECTDRAWSURFACE * pPics;
int nFrames;
int nDelay;
bool bBackLoop;
}ACTION;

std::map <std::string, ACTION *> m_arrayPics;

構造時是這樣的﹕
/**************************************************************
char * pActionName --- 動作名﹐索引一個ACTION結構
int nFrames --- 幀數﹐確定ACTION結構中pPics的大小
char * pFileNames --- 幀對應的BMP
unsigned int nDelay --- 幀間的延時
COLORREF colorkey --- 幀圖片的透明色
bool bBackLoop --- 顯示時是否迴轉
***************************************************************/
bool CSprite::
LoadPics(char * pActionName, int nFrames, char * pFileNames[], unsigned int nDelay, COLORREF colorkey, bool bBackLoop)
{
ASSERT(nFrames>0);

ACTION * p = new ACTION;
p->pPics = new LPDIRECTDRAWSURFACE [nFrames];
for (int n=0; n<nFrames; n++)
{
if ( NULL == (p->pPics[n] = GetDDWin()->CreateSurface(pFileNames[n])) )
{
for (int m=0; m<n; m++)
if (p->pPics[m])
p->pPics[m]->Release(), p->pPics[m]=NULL;
return false;
}
else
{
DDCOLORKEY ddck;
ddck.dwColorSpaceLowValue = colorkey;
ddck.dwColorSpaceHighValue = colorkey;
p->pPics[n]->SetColorKey(DDCKEY_SRCBLT, &ddck);
}
}
p->bBackLoop = bBackLoop;
p->nDelay = nDelay;
p->nFrames = nFrames;

m_arrayPics[pActionName] = p;

GetDDWin()->SetTimer(m_dwID, nDelay, NULL);

return true;
}

在最後的解構函數中﹐學生如下寫道﹕
/**************************************************************
清除每一幀的LPDIRECTDRAWSURFACE
**************************************************************/
void CSprite::
Release()
{
std::map <std::string, ACTION *>::iterator it = m_arrayPics.begin();
for (; it!=m_arrayPics.end(); it++)
{
ACTION * p = (*it).second;
for (int n=0; n<p->nFrames; n++)
{
if ( p->pPics[n] )
p->pPics[n]->Release(), p->pPics[n]=NULL;
}
delete [](p->pPics);
delete p;
}
}

如果用的是VC的STL﹐除了一大堆warnings﹐結果運行正常。
可是如果用SGI的STL﹐沒有warning﹐可是VC和BoundsChecker都報告有320個bytes的memory leaks。提示是在stl_alloc.h中的 __default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size, int& __nobjs) 中的這一句﹕
_S_start_free = (char*)malloc(__bytes_to_get);
學生十分不解﹐由於STL學得實在不精﹐所以預備近期購入老師的GP&STL一書學習。但是目前十分急于清楚此問題的原因﹐萬般無奈﹐打擾老師﹐學生非常抱歉﹗

祝 老師新年快樂﹗ 謝謝﹗

●侯捷回覆:你的程式使我發昏。

每個編譯器對 C++ Standard 的實現程度都不相同,不能問我為什麼這個這樣…那個那樣…。再有,以工具軟體檢查 memory leak,不要儘信結果,很多時候它會誤判。根據它給的報告,親身驗證是否有 memory leak,才是良好的態度。我並不是說你所舉的例子有誤(頭昏使我無法閱讀你的程式),只是提醒你。

唯《STL 源碼剖析》能夠幫助你解開 STL 實作上之各種謎霧。

BTW,我以 VC6 宣告 map object,沒有任何警告。

 

 

傳送日期: 2002年1月1日 PM 08:38
候俊杰先生您好﹕
我非常感謝您用您的辛勤汗水寫出的《深入淺出MFC》﹐尤其是您對MFC構架的分析﹐使我收益匪淺﹐我是從網絡上下載您的這套書籍的電子版而獲得閱讀的機會。我十分敬佩您的廣闊的胸懷和優美的文筆。
我是吉林人﹐是一名計算機程序設計的愛好者﹐現年30歲。工作中時常用到在計算機方面學到的知識。我出於對您的尊重而給您發送電子郵件。我希望今後能夠多多看到您在計算機方面的著作。看您的書沒有枯燥之感﹐我很喜歡您寫的書。

●侯捷回覆:讀者謬讚如此,推動了我的寫作。

 

 


傳送日期: 2002年1月9日 PM 08:07
主旨: 有一本好的中譯本對我真的很重要!!
居住省份(臺灣讀者請寫縣市):新竹市
對侯捷的建議:我剛接觸C++不到四個月,又剛好在修一門課
”程式語言”講了很多我不懂的觀念,同時又找不到合適的中文書,因此由同學處知道你所翻譯的C++ primer,看了覺得真的受益良多,因此到網上來看看,收穫又更多。
我確實很想好好學會C++,現在又有你所翻譯的書籍,頓時讓我對學C++充滿信心,非常感謝你的付出,更期望你能有更的著作出現。

●侯捷回覆:收到這樣的信,我很歡喜。

 

 

傳送日期: 2002年1月9日 PM 10:00
你好﹐請問stl如何實現容器二杈樹的功能。

●侯捷回覆:請問中國的經濟問題如何解決?

 



傳送日期: 2002年1月9日 PM 10:31
侯老師﹐您好﹗
我是一名MFC初學者﹐下午在網上看到勘誤表﹐有點問題想向您請教。
P384 關於【File/Open】調用流程為﹕CWinApp::OnFileOpen --> CDocManager::OnFileOpen -->CwinApp::OpenDocumentFile-->CDocManager::OpenDocumentFile -->CMultiDocTemplate::OpenDocumentFile

而在p344 關於【File/New】命令項﹐
原書中流程與前者極其相似,從邏輯上推斷也應該相似﹐只不過用New 代替了Open。

但勘誤表要求將 P344的 CWinApp::OpenDocumentFile 刪除。因次不解﹐還望明示.

●侯捷回覆:「原書中流程與前者極其相似,從邏輯上推斷也應該相似」,這是你的推斷,應以 MFC source 為準。根據 MFC source,我寫下了勘誤表上的修正。為什麼如此?因為 [New] 和 [Open] 還是有那麼一些些不同 :)

 

 

傳送日期: 2002年1月10日 AM 09:17
候先生﹕您好﹗
因您之大名和<<深入淺出MFC2/e>>在大陸銷售之火爆﹐我嘗試在www.jjhou.com下載了其電子書。但在Acrobat Reader 5.0.5中打開時卻出現如下錯誤﹕"There was an error opening this document. The file is damaged and could not be repaired"。我用的是簡體中文OS﹐下載了Acrobat Reader繁體語言包也不行﹐是不是因為操作系統是簡體的原因而不能打開呢﹖現特告之﹗
謝謝﹗

●侯捷回覆:下載請注意

 

 

傳送日期: 2002年1月10日 PM 03:51
侯捷先生﹐您好﹗
我是大陸的一名學生﹐今年元旦﹐我有幸拜讀了您的著作《深入淺出MFC 2E》。對您在精闢而獨到的論述﹐我本人深表欽佩﹗我曾經在LINUX下對SOCKETS編程做過一定的研究工作﹐在LINUX下各種宏、函數使用都非常的簡便而清晰﹐而
Microsoft卻提供了一大堆令人生畏的宏和運作機製﹐您卻能將其運用得如此爐火純青﹐實數不易﹗
其次﹐我很想了解目前全球軟件業的發展趨勢﹐不知您對此有何高見。您也知道﹐
Visual C++功能極為龐大﹐您對其中哪些技術的前景最為看好呢﹖在這軟件的海洋中﹐我確實感到有一點迷茫﹐您能否給我一點明示呢﹖

●侯捷回覆:Microsoft卻提供了一大堆令人生畏的宏和運作機製,唔,很多人都對MFC的 一堆 macros深懷惡感,我卻沒有這種感覺。我覺得設計它們的人很厲害。當我清楚了那些 macros 的作用後,使用它們再簡單不過。把 macros 當成語言的延伸,當成一個operator 或一個 keyward,不就好了嗎。把 DECLARE_DYNAMIC() 和 sizeof() 視為同一種東西,有何困難?沒有,而前者是 MFC macros,後者是 C++ operator。

「Visual C++功能極為龐大﹐您對其中哪些技術的前景最為看好呢﹖」我對它發展多年、市場佔有率高、穩定性高,最看好 :) 

許多人批評 MFC 運用了微軟(VC++)的許多獨特語言特性,令我不解。我認為說這話的第一個人對 MFC 和 C++ 語言沒有深刻了解,其他人則是人云亦云。MFC 之所以只能用於Windows 平台,因為它所呼叫的底層是 Win32 APIs。你能期望一個呼叫 Win32 API 的 class library 用於 Linux 或 Mac 嗎?MFC 提供了一些 macros,你不能不用,不能用錯,但它們的使用法則十分規律,「不會用」或「誤用」實乃因為程式員自己未能好好認識這些 macros,換句話說,太多人走都還不會就妄言跑,跑不快又怪天氣不好,風向不對,最後怪老爸老媽給生一付小短腿。MFC 設計出這些 macros、使用自製的 RTTI 機制,但完全符合 C++ Standard。macros 是語言層級,符合 C++ 標準語法,當然適用於任何 C++ 編譯器。我模擬 MFC 而作的 MFCLite3(見《多型與虛擬》2e第6章),除以文字模式取代圖像模式、以 ANSI file functions 取代 Win32 file APIs 外,主要架構都和 MFC 相同,適用於各種 C++ 編譯器和作業平台,便是明證。 Qt 之所以可跨各種作業平台,因為它不直接呼叫任何平台的 APIs。Qt 身上一樣有類似 MFC 的那些 macros(請參考《程序員》2002/02 Qt 專欄):

class Demo : public QObject
{
    Q_OBJECT     // 這個便是 macro
public:
    ...
private:
    ...
};
// in qt/qobjectdefs.h
#define Q_OBJECT                                 \
public:                                          \
  virtual QMetaObject *metaObject() const {     \
    return staticMetaObject();                   \
  }                                              \
  virtual const char *className() const;        \
  virtual void* qt_cast( const char* );          \
  virtual bool qt_invoke( int, QUObject* );      \
  virtual bool qt_emit( int, QUObject* );        \
  QT_PROP_FUNCTIONS                              \
  static QMetaObject* staticMetaObject();       \
  QObject* qObject() { return (QObject*)this; } \
  QT_TR_FUNCTIONS                                \
private:                                         \
  static QMetaObject *metaObj;
// in qt/qobjectdefs.h
#ifndef QT_NO_PROPERTIES
# define QT_PROP_FUNCTIONS \
  virtual bool qt_property( int, int, QVariant* );
#else
# define QT_PROP_FUNCTIONS
#endif
// in qt/qobjectdefs.h
#ifndef QT_NO_TRANSLATION
# ifndef QT_NO_TEXTCODEC
// full set of tr functions
# define QT_TR_FUNCTIONS \
  static QString tr( const char *, const char * = 0 ); \
  static QString trUtf8( const char *, const char * = 0 );
# else
// no QTextCodec, no utf8
# define QT_TR_FUNCTIONS \
  static QString tr( const char *, const char * = 0 );
# endif
#else
// inherit the ones from QObject
# define QT_TR_FUNCTIONS
#endif

再看 Qt 的 Signals/Slot 機制所需的 connect() 動作中用到的兩個 macros:

// in qt/qobjectdefs.h
#define SLOT(a)    "1"#a
#define SIGNAL(a)  "2"#a

上述這些 macros 和 MFC's DECLARE_xxx(), IMPLEMENT_xxx() 手法如出一轍。

 


傳送日期: 2002年1月10日 PM 03:12
侯捷老師您好﹗
很冒昧給您添麻煩。我使用VC時間不長﹐基本屬於剛入門。現在我手底下有個任務不知該如何下手,下面我仔細的介紹﹐這個活是我VC入門後的第一個活﹐所以
對我很重要。希望你能幫我建立信心

用戶角度看﹐情況是這樣的﹐這個程序是把聲音和圖像合成在一起﹐製成節目﹐播放起來就和電視差不多﹐就是圖像的幀少一些﹐看起來不是那麼連貫。製作過程是﹕(提前已經把聲音錄制好﹐圖片也作好了)操作員帶ぴ耳機﹐聽解說的聲音﹐在適當的位置暫停﹐然後把這個地方需要的圖片插入﹐接ぴ再繼續聽聲音。節目製作完成後﹐預覽播放時﹐就象播放VCD一樣。
程序內部實現﹕程序中以MPEGⅡ音頻文件定位﹐它是24ms一幀﹐在上面操作員點擊暫停後﹐程序讀出目前聲音是處與第多少幀﹐然後操作員選擇圖片﹐點擊插入後﹐應該在配置文件中生成一條記錄﹐記載在第多少幀處插入那幅圖片。播放時聲音連續播放﹐並且根據配置文件﹐在適當的位置﹐把需要的圖片顯示在界面的picture控件中。這樣就實現了聲音和圖像的同步。(比如﹐老師上課前備課就可以採用這個程序﹐把聲音錄制好﹐可能一堂課中需要20張插圖說明﹐就可以在需要的時候顯示圖片。製作好後﹐在課堂上給學生播放﹐給學生的感覺有些象看VCD﹐不過就是隔幾分鐘才換一幅圖片﹐剛好可以做筆記)。節目播放時需要這些素材﹐MPEGⅡ音頻文件﹐若干需要的bmp圖片﹐還有對應這個節目的配製文件。
聲音的錄制和播放不用關心﹐他們這兒有專門的卡﹐比聲卡方便的多。錄制就是每隔24ms從錄音卡上讀一幀數據出來﹐存入文件﹔播放就是每隔24ms向放音的卡上寫入一幀數據。

如果你有時間幫我做這麼個例子﹕使用Slider和Picture控件﹐暫時不關心聲音。把Slider分成1000份。製作過程中它自動向後滾動﹐在某一位置﹐用戶點擊暫停﹐這時候選擇圖片﹐確定後在配製文件中就把這時候Slider的位置和用戶選擇的圖片名字記錄。製作完成後﹐播放時﹐滾動條根據時間推移自動滾動﹐並在配製文件中記錄的Slider位置時顯示要求的圖片。圖片就是您做的10張bmp圖像就可以。
您在百忙中給我解答﹐謝謝﹗
我這個週末就需要確定

乞求真主賜您快樂﹐好人好報﹗

 

 

 

傳送日期: 2002年1月10日 PM 08:48
你好﹐候老師﹕
首先﹐祝您新年快樂﹗
我看了您的《多型與虛擬》﹐當中有一節介紹copy ctor,說到copy ctor使用情況﹐一個是作為函數的參數﹐另一個是作為函數返回﹐我覺得你還忘了一種情況﹐就是所謂的初始化﹐int i = int(2); ClassA a1 = a2;


 

 

傳送日期: 2002年1月11日 AM 01:24
侯捷老師﹕
您好﹗我下載了您的《深入淺出 MFC》2/e 電子書﹐給您回信。
居住省份﹕北京市
對侯捷的建議﹕沒有﹐向您學習
我以前做過中學物理教師6年﹐對計算機感興趣﹐後來在公司打工﹐編程、測試、文檔、售前、需求分析、項目規劃都做過﹐參與過大型項目的開發﹐也主持開發過中等項目的開發。總體感覺IT行業很浮躁﹐一種語言用過一個月就認為自己是專家﹐我很反感。另外﹐由於在公司幹活﹐需要用什麼語言就用什麼語言﹐所以哪一樣都不精﹐很想深入研究一下。所以拒絕了別人的邀請﹐干起了教師的行業(在朋友的公司也兼職)。
在學校﹐由於
我做過項目﹐所以很受學生歡迎﹐但是基礎感覺有欠缺﹐在CSDN上看到了您的情況﹐才注意到您﹐(以前在公司上網規定很嚴﹐我雖然當了項目經理﹐還是不能隨意上網﹐並且經常封閉式開發﹐所以不知您的大名)﹐很希望在三到四年的時間裡﹐成為一個基礎理論扎實並比較熟悉業界最新技術的稱職教師﹐您的道路就是我的夢想。
中國的程序員沒有規範的培訓﹐並且有很多的錯誤認識﹐把寫代碼看成是水平最高的(這種人很多﹐在我經過的項目中﹐項目經理必須掌握樣樣比程序員高才行﹐否則項目很容易流產)。以後幾年﹐IT行業會越來越規範﹐越來越冷靜﹐
中國IT行業需要您這樣的專家

●侯捷回覆:中國 IT 行業需要您這樣胸懷理想又務實的教師。


 

傳送日期: 2002年1月12日 PM 09:55
居住省份(臺灣讀者請寫縣市):中國上海
對侯捷的建議:看了候老師的網站,怎麼說,很感動,我還沒有看過你的書,但我明天一定會買一本,因為我還不懂c++,但看了您的這麼多經歷與您文章,使我不僅僅在技術上起了景仰,更重要的是為人處事給人的感覺是那麼的舒服,我個人非常欣賞您,很高興能夠有機會給您寫信。我剛剛參加工作不久,受聘與上海一個台資軟體公司,雖然是技術行當,但卻更多了做了管理,平日浮躁多與安靜,內心非常之恐慌。需要認真下來去做一些喜歡的事情,今日受您之影響,我發覺自己有了更大的激情與動力,希望能夠有幸參與到其中,感受代碼人生的快樂。謝謝您給我一個下午的快樂!

●侯捷回覆:希望我給你不只一下午的快樂 :)

 

 

傳送日期: 2002年1月13日 AM 09:18
候老師﹕
您好﹗我是個C++初學者﹐看了您譯的Essential C++中文版裡的第一章﹐有些問題想請教您﹕

(1).第5頁裡的程序裡的頭文件為什麼一加上".h"就會出現如下問題。
#include<iostream.h>
#include<string.h>
using namespace std;
int main()
{
string user_name;
cout<<"please enter your first name:";
cin>>user_name;
cout<<'\n'
      <<"Hello,"
      <<user_name
      <<"...and goodbye!\n";
return 0;
}

--------------------Configuration: 01 - Win32 Debug--------------------
Compiling...
101.cpp
e:\我的文件夾\vc++\01\101.cpp(3) : error C2871: 'std' : does not exist or is not a namespace
e:\我的文件夾\vc++\01\101.cpp(6) : error C2065: 'string' : undeclared identifier
e:\我的文件夾\vc++\01\101.cpp(6) : error C2146: syntax error : missing ';' before identifier 'user_name'
e:\我的文件夾\vc++\01\101.cpp(6) : error C2065: 'user_name' : undeclared identifier
Error executing cl.exe.

01.exe - 4 error(s), 0 warning(s)

(2). using namespace std;我還是不清楚

(3).第2頁裡說“程序執行無誤時我們令main()返回零。若返回一個非零值﹐表示程序在執行過程中發生了錯誤。”
通常不是說零是假﹐返回零應該是函數中止嗎﹖

以上是學生在學習時碰到的幾個問題﹐希望候老師幫幫我。

祝﹕萬事如意
翻譯更多的好書﹗
2002.1.11

●侯捷回覆:(1) 看書要仔細 (2) 多看幾本書 (3) 這樣的問題到論壇上發問。

 

 

傳送日期: 2002年1月11日 AM 11:53
近讀侯sir文章﹐發覺對“因特網”一詞的翻譯頗有嘲笑之意。可能是先入為主的緣故﹐我對這個詞的翻譯倒覺得不錯。
如同侯sir最愛喝的咖啡以及人人都喜歡坐的沙發一樣﹐將Internet翻譯成因特網所採用的也是音譯的方法﹐讀起來琅琅上口﹐而且網絡互聯的最終目的不就是要讓人感覺只存在一個網嗎﹖如此聲情並茂的絕好翻譯﹐怎麼能說
翻的不好﹖二十年來﹐恐怕只有基因(gene)一詞的翻譯能夠與之媲美。

●侯捷回覆:您所舉的例子,咖啡和沙發,給了我當頭棒喝的感覺。謝謝。

我是這麼想的。科技術語,多採用意(義)譯。咖啡和沙發,只是一個名稱,談不上什麼意義,採用音譯倒也理所當然。

好的譯名需要一個演進過程。一開始接觸 internet 的人,沒有想到 「互聯網」這個好詞,隨口說出「因特網」。然後,好詞出現了,被大眾接受了。這是一個演進過程。我並不嘲笑最初創造「因特網」一詞的那個人,但聽說大陸官方要求媒體必須採用「因特網」,我個人覺得很…呃…該怎麼說才能不傷感情呢…很…有趣吧。

最後,如同我在該文所說,請把翻的不好改為譯的不好 :)

 

 

 

傳送日期: 2002年1月13日 AM 08:55
侯老師: 您好﹗
作為一個剛步入編程天地,卻時常迷失方向的菜鳥來說,有您這樣一位老師和您的書做引路明燈,是一件很幸運的事﹗
在您的網站down了兩次《深入淺出MFC》﹐卻不知為何﹐文檔中空空如也﹐什麼也沒有﹐哪怕是亂碼都沒有﹐能給我個答案麼﹖
不論怎樣﹐堅持編程是我目前最堅定的信念﹐希望今後能繼續看到老師您多出好書﹐多給我們這些學子以啟迪﹐我們永遠支持您﹗
敬禮﹗

●侯捷回覆:下載請注意

 

 

傳送日期: 2002年1月11日 PM 03:57
侯先生﹕
  你好﹗我是通過〈〈深入淺出MFC〉〉而認識您的。真的很希望忙碌的侯大哥您能有空看到我這封信﹐我最近實在很煩。
  我是浙江大學的一名學生﹐正讀大二﹐學的是工商管理﹐但我越來越感覺到這專業並不適合自己(我的性格比較內向)﹐而自己好像對編程有比較濃厚的興趣。
  我現正考慮ぴ自己的前途問題﹐是學好自己本專業呢﹐還是像自己想的那樣做個程序員﹐但我知道﹐要做個出色的程序員並不那麼容易﹐我真的想聽聽侯大哥您的建議﹐我的數學基礎不是太好﹐領悟力不是很高﹐而且人也不算是很聰明的那種﹐您說我能把編程學到哪種程度呢﹖
編程是很需要天賦的嗎﹖我真的很怕自己付出了寶貴的青春卻得不到應有的回報。
  我真的很希望侯大哥您有空能回信給我﹐真的很需要您的建議﹗﹗
  
●侯捷回覆:編程是很需要天賦的嗎﹖編程不需要天賦(有天賦當然能走得很好很特別)。我真的很怕自己付出了寶貴的青春卻得不到應有的回報。咄,何謂應有的回報。

 

 

傳送日期: 2002年1月12日 PM 05:24
尊敬的候捷老師﹕您好﹗
拜讀您的多部大作﹐受益頗豐。最近在讀您的《STL源碼剖析》一書的電子繁體版﹐我是剛剛接觸STL﹐只知其皮毛﹐您在書中提到STLPort的移植經驗﹐我同時在使用VC6.0和BCB5.5﹐對於在BCB環境下的移植我有一點不是很明白﹐還請老師給我指點一二﹐在對BCB環境下的移植中﹐僅僅說了在命令提示符下可以編譯通過﹐可是在圖形界面下使用SGI STL卻沒有給出方法﹐我嘗試了一下在編譯設置的時候給出路徑﹐但是還是不行﹐不知如何解決﹐還望候捷老師提示一二﹐小生感激不盡。



 

傳送日期: 2002年1月14日 AM 02:38
一直在看csdn您的專欄﹐受益良多﹐在此說聲謝謝了。

我已從事多年的計算機圖書翻譯工作。在這期間﹐不斷進步﹐也在不斷體驗成功和失敗。從最開始極差的翻譯習作開始﹐到現在自己覺得“尚可”的水平﹐感覺再難有一個很大的提高﹐因此頗為迷茫。至於原因﹐主要在於追求新知和花在深思熟慮的時間較少。
大陸的翻譯報酬極低(我只能拿到30∼40元/千字)﹐因此必須多譯﹐但這樣就造成了一個死循環──為了生活﹐我很難花上一年半載的時間去專門學習新知識﹐專門提高文學素質﹐專門去深入一門計算機學科。

由此造成的翻譯疏錯﹐恐怕會令許多買書的人感到氣憤吧﹖

但人總是要進步的﹐只是進步的速度...隨信附上譯作書稿一篇。如果您有空﹐瀏覽一下大致有什麼問題吧。“旁觀者清”﹐希望您的意見﹐能促使加以改進。

●侯捷回覆:你能注意到自己的問題,表示是個有心人。在酬勞與付出不成比例的情況下,的確很難產生優秀的專職寫譯人才。大環境不變,我也想不出什麼好辦法。

我個人認為,技術書籍作者/譯者,並不需要文學素質就可以讓自己的作品達到「達」的境界。只要通順,就達。要通順,很簡單,以讀者的心情多看幾遍自己的作品,多改幾遍,肯定「達」。這是我很強調的沉澱過程。有人說趕快都來不及了,還沉澱呢。這是層次的不同,選擇的不同 — 當然也造就結果的不同。

 

 

傳送日期: 2002年1月14日 PM 02:10
侯先生﹕
您好﹐我是一名大陸的IT工作人員﹐現在在一家網站任軟件工程師﹐說來也好笑﹐我本不是科班出身﹐但在大學裡讀書的時候﹐很喜歡研究軟件開發﹐誤打誤撞﹐畢業後竟找了一份軟件開發的工作﹐是開發三層結構的網絡應用程序﹐並開發ORACLE的數據庫。我感到由於本身的基礎不太好﹐再加上目前各種軟件開發技術多的讓人喘不過氣﹐自己就象一隻在大海浬漫游的小船﹐看不到燈塔﹐也無人指引﹐很是鬱悶﹐為了能工作後不間斷的學習﹐我自己自學JAVA開發技術和ORACLE管理技術﹐並取得了SUN認證JAVA2程序員﹐和ORACLE認證數據庫管理員。但後來我發現又沒什麼目標了﹐不知該往哪裡發展﹐應該再學什麼技術﹐
理論必須聯繫實際﹐由於工作條件的限制﹐我又沒機會接觸別的技術﹐所以覺的死讀書也沒太大用處﹐現在很迷茫﹐望先生不吝賜教﹐萬分感謝﹗

●侯捷回覆:如果老天沒給你機會,你就自己創造。除此之外我也不能給你什麼意見。

 

 

 

傳送日期: 2002年1月14日 PM 06:28
侯先生﹕
我在實際應用中使用了一個Formula的OCX電子表格控件﹐可它只提供了打印功能﹐
即 F1Book->Print()﹐並沒有打印預攬功能﹐我曾試圖從其打印過程中產生的EMF臨時
文件入手﹐可總是找不ぴ北﹐這個問題長時間困擾ぴ我﹐為此我專程跑到上海找資料﹐
忙碌了一天﹐才發現只有你的《深入淺出MFC》說的比較詳細﹐可我還是不知道怎樣下
手去截獲打印過程中的數據以供預攬﹐請你指點該怎樣做﹖該到什麼地方查什麼資料﹖


 

傳送日期: 2002年1月14日 PM 06:28
候俊杰先生﹐您好﹗
我是您大陸的一位讀者﹐上次給您寫了一封信﹐您沒有回﹐我深感失望
因為我真的想學好VC﹐看了您的《深入淺出MFC》後﹐深受啟發﹐但是我想編一個
程序卻感到困難重重﹐我想您給我推薦幾本實用性比較強的大師級的書﹐深表感謝﹗
您的忠實讀者 敬上

●侯捷回覆:Inside Visual C++(新版易名了,我總記不住)。

 

 

傳送日期: 2002年1月15日 PM 02:04
侯老師﹕
您好﹐我是一個VC++的初學者﹐我正在拜讀您寫的《深入淺出MFC》一書﹐但在學習中與到一些難點﹐望指教。在您寫的"frame6"程序中的一句是﹕
CObject*(PASCAL *m_pfnCreateObject)();
我想問的是﹕
1)為什麼在此句結尾處還要加一個括號﹖
2)PASCAL 是_stdcall的宏定義﹐_stdcall 是什麼意思﹖
謝謝﹗

●侯捷回覆:(1) function pointer  (2) 一種 calling convention



傳送日期: 2002年1月15日 PM 09:52
jjhou候老師: 您好﹗
我□□□﹐是武漢大學地理信息系統專業碩研一年級的學生﹐男﹐24歲﹐安徽人﹐才接觸vc﹐所以只是買了你《Essential C++ 》﹐後又覺得簡單﹐看過後就送給朋友了。由於經濟原因﹐一直沒有買您的《深入淺出 MFC》﹐所以才下載一睹為快。
我想可能是我習慣了看大陸學者寫的書的緣故﹐看您的書不是很爽﹐我想看多了也許就好了。對您提建議以我目前的水平還不夠﹐我mfc還是三腳貓﹐碩士畢業也不知道怎麼樣﹖我想我先也在數據結構、算法和面嚮對象方法上下更多功夫吧。



      

 

傳送日期: 2002年1月16日 AM 11:23
學校﹕北京清華大學數學系
你的書非常好看﹐雖然在此之前我已看過Prosise的書。

 

 

傳送日期: 2002年1月16日 PM 12:38
侯先生:您好﹗
   最近我發現您的網站,真佩服您的胸襟,將有價值著作公開給人下載。
   我有一個意見: 在《深入淺出MFC》p.173,其中這段程式碼:

AFX_MSGMAP theClass::messageMap = \
{ &(baseClass::messageMap), \
(AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) };

   看來非常奇怪,&(baseClass::messageMap),\ 之後應該是
   &theClass::_messageEntries[0],查閱原始碼,&theClass::_messageEntries[0]?~是
   原文,我不清楚(AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries)意思,可否解釋
   (AFX_MSGMAP_ENTRY*)&(theClass::_messageEntries)?
   另外我有問題向您請教:
   在《深入淺出MFC》p.166,(WORD)和(WORD&)有什麼不同?為何可以統一寫作(WORD&)?
ar >> (WORD&)m_center.x;
ar >> (WORD&)m_center.y;
ar >> (WORD&)m_radius;
   於是我寫以下測試碼嘗試來理解:
#include <iostream>
using namespace std;
int main()
{
int num, compare;
num = 1;
cout << "Initially num = " << num << endl << endl;
(float&) num = 100;
// (float) compare = 100; error : '=' : left operand must be l-value
cout << "After (float&) num = 100\n";
cout << "num is equal to " << num << endl;
cout << "(float&) num is equal to " << (float&) num << endl << endl;
(float&) num = 543.445;
           // warning : '=' : truncation from 'const double' to 'float'
// (float) compare = 543.445; error : '=' : left operand must be l-value
cout << "After (float&) num = 543.445\n";
cout << "num is equal to " << num << endl;
cout << "(float&) num is equal to " << (float&) num << endl << endl;
(int&) num = 45.567;
(int) compare = 45.567;
cout << "After (int&) num = 45.567\n";
cout << "num is equal to "  << num << endl;
cout << "(int&) num is equal to "  << (int&) num << endl;
cout << "compare is equal to "  << compare << endl << endl;
return 0;
}

   結果如下:
   Initially num = 1

   After (float&) num = 100
   num is equal to 1120403456
   (float&) num is equal to 100

   After (float&) num = 543.445
   num is equal to 1141365883
   (float&) num is equal to 543.445

   After (int&) num = 45.567
   num is equal to 45
   (int&) num is equal to 45
   compare is equal to 45

   看來非常混亂,望賜教。
   祝生活愉快

●侯捷回覆:你需要一本 C++ 書籍。
不要把《深入淺出MFC》視為一本學習 C++ 的書 — 雖然它的第二章可以打通你對虛擬函式的任督二脈。

 

 

傳送日期: 2002年1月16日 PM 12:59
侯捷﹕
你好﹐你的為人的風格我非常喜歡﹐我以前從沒有任何不認識的人寫過E─MAIL﹐這是第一次。
我先簡單的介紹一下﹕我是大陸的一名大四的學生﹐我在國內的《程序員》雜誌上拜讀了你的一篇演講稿﹐對你的諸多觀點十分讚同﹐我想這應該是我們風格比較象吧。很希望能和你保持聯繫﹐盼望ぴ你的回信。
這封信先寫到這﹐我會和你再聯繫的。當然如果你不希望﹐請來信告之﹐我不會打擾你的。
祝身體健康(好人長命) 多譯好書(我想看)

 

 

傳送日期: 2002年1月16日 PM 01:59
侯老師﹕你好﹗
我是一名大陸讀者。早就在網路上聽說你的大名了﹐前日難得進城﹐看到一本好書《深入淺出MFC》﹐匆匆翻了幾頁﹐覺得是本好書──對我而言。匆忙間也就辦了錯事﹐書中光盤忘了拿就回家了﹗思量ぴ回去一次怪遠的﹐故冒昧打擾﹐假如不是太大的話,求先生發一份給我(包括程式源碼和執行檔)。謝謝﹗

 

 

傳送日期: 2002年1月16日 PM 04:39
老師您好
前一陣子買了您譯的C++ Primer 但為何在Visual c++內Complier這份程式碼都出現這個錯誤?

include <iostream>
#include <fstream.h>
#include <string>

int main()
{
ofstream outfile("out_file.txt",0);
string word; //有問題 error C2065: 'string' : undeclared identifier

if(! outfile)
{
cerr << "err: open out file err\n";
return -1;
}

cout << "Please enter 'Q' : ";
ofstream << word //有問題

return 0;
}

麻煩老師幫我解答 謝謝

●侯捷回覆:看不看侯捷寫的導讀?此書《導讀》 p19標題「範例程式注意事項」第二點,有你要的答案。

 

 

傳送日期: 2002年1月17日 AM 10:21
我是大陸網友﹐來自江蘇省﹐通信電子專業研究生﹐男﹐25歲。從同學那裡得到了您的網址。一想到借助于您的書﹐初窺vc門徑的我可以更深入了解和使用vc﹐我就對您充滿了感激之情。一個社會能有一批潛心學術研究的學者﹐並能得到比較豐厚的回報﹐這是科技成熟到一定階段的標誌﹐也是個人的福音。這一點台灣走到了大陸的前面。
再次表達我的感激。





傳送日期: 2002年1月17日 AM 11:05
居住省份(臺灣讀者請寫縣市):高雄縣
對侯捷的建議:
您已經成為我生命中的第2個偶像了(第1個是馬蓋先^^)!!
今後要以您為目標...努力向前!!
希望您繼續努力寫好書...替台灣的電腦中文書籍注射
一劑強腦針...感謝您勞心勞力!!
加油...

我有下載您所有電子書(完整電子檔)!!
感謝您的貢獻...

 

 

傳送日期: 2002年1月19日 AM 01:24
居住省份(臺灣讀者請寫縣市):台北縣永和市
對侯捷的建議:
侯老師出的書都很好,不過好像並沒有電子檔(pdf)的版本可以購買,如果可以以電子檔方式出售,應該可以讓我們比較沒錢的人可以有另一種取得侯老師書籍的方式.

●侯捷回覆:電子書,需要一個比較成熟的社會,一個比較理想的教育。我會記住你這樣的讀者。

 

 

傳送日期: 2002年1月21日 PM 01:44
侯老: 您好!
我是南京□□大學計算機專業的一名本科生,我讀了您1998年4月編的<<深入淺出windows mfc 程序設計>>(華中理工大學出版社),感受很深.當然﹐我有很多地方弄不懂,想請教一下.
我雖然才上大二,但已經自學了 tc++,API windows編程 ,vc++可視化編程.正如您所說,我原來
只會在APP wizard 上click,click,click!!! 但弄不懂為什麼click,click,click!!!看了您的書之後,我恍然大悟.老實說,您的這本書,的確是我見過的把mfc講的最深的一本書,我非常感激您.
我在這本書的第127頁看了這樣一段:
void CRuntimeClass::Store(CArchibve& ar) const;
:
void CRuntimeClass::Store(CArchibve& ar) const
{
:
}
請問 const 起什麼作用?一般,const在變量前表示常量,而這兒又是什麼意思呢?我查了資料,都沒有找到,請幫我解答一下.
我非常想和你交個朋友,我叫□□□,甘肅省白銀市靖遠縣人.我的志嚮是當一名程序員,希望您能夠多多指教. 下次再見,謝謝!

●侯捷回覆:你需要一本 C++ 書籍。

 




傳送日期: 2002年1月21日 PM 04:38
主旨: A wonderful book Dissecting MFC !

Dear Mr. Hou:

I’m a freshman in Harbin Institute of Technology (HIT). I don’t have BIG5 system so I try to express myself in English.

I bought your book (Simplified Chinese 2/e). It’s such a wonderful book that I have read it for a few times. Though the book is a little expensive, it agrees with its value. I’ve bought some books before which helped me a little. However they are BOOKS, not a single book, not a whole book.
Dissecting MFC is different. It has told me a lot that I used to want to know and something that I even haven’t heard of. It taught me to know the relationship between Document and View. It made my programs better (I used to call on OnDraw only leaving a useless CMyDoc J).

What’s more, the book let me know you, Mr. Hou. You recommended many classical books in Programmer. How I wish I would read them all one day. You know, these books are usually expensive. Maybe I will do a part-time job to earn some money later in the future, for these books. Ha, that’s my wish. However, I’ve had The C++ Programming (3/e) in English already.

I’m not good at English. So I could not express myself correctly. This is just a simple letter. But I want to say THANK YOU. Thank you for giving us readers such a good book.

As the Spring Festival is drawing near, I want to wish you a Happy New Spring Festival (maybe I didn’t say it in correct wayJ)!!!

Your reader,

●侯捷回覆:收到這樣的信,我很開心。

 

 


傳送日期: 2002年1月22日 AM 04:35
主旨: 你好,有個關於您書中的問題。

你好,小弟初學 MFC ,不過是把 MFC 和 SDK 同時在學,所以不時在互相比對,也認同您「深入淺出 MFC 」的寫作方式,呃,不想浪費你的時間,小弟直接問問是吧。

CWinApp::CWinApp(LPCTSTR lpszAppName)

這是節錄自你書中的 CWinApp 的建構式,而他應該會在
CMyWinApp abcd ; 這個全區物件產生時被呼叫(因為我們並沒有改寫 CMyWinAPP 的建構式,然而,小弟的問題在於 lpszAppName 這個引數,是從何而來的呢?

我不了解
為何這個建構式必需被呼叫,但看起來它卻不會被呼叫到,不是嗎?

也許是我讀書不認真,但我真的想不通,希望有一天能等到您的回信,謝謝。

●侯捷回覆:lpszAppName 這個引數從WinMain()傳來。CWinApp constructor之所以會被呼叫,因為 CMyWinApp abcd ;(MFC稱之為一個 application object)是個 global object。global object 建構於程式起始之初 — 甚至在 main() 或 WinMain() 之前。

 

 

傳送日期: 2002年1月22日 AM 10:37
候捷老師:
您好,一直很喜歡您的書,不知您和王建興老師合譯的
Thinking in Java 2e 中文版,什麼時候能夠買到? 是不是大陸和台灣是同步發行和出版的?會不會出它的簡體中文版?
祝您:
新年快樂!
身體健康!

●侯捷回覆:可望於 2002第一季結束前後出版。繁體版在臺灣出版,在臺灣發行。至於大陸是否買得到,我不知道(根據經濟理論,需求夠強,就會出現供給)。此一 "侯捷/王建興譯本" 無簡體版。

 


傳送日期: 2002年1月23日 AM 01:39
侯老師你好!!

我是你的忠實讀者, 說真的你的每一本書我都有....
個人因為工作的關係, 長期在中國, 哦..我是高雄人...1971年

近年來, 您的書主要都在一些軟體技術方面, 對系統層面的技術比較少一點.

對不起真的很想請教你一個問題, 但又怕擔誤你的時間. 如果您真的沒時間, 也沒關係, 十分感謝你看此信...

我想請問的問題是, 有關 80x86 的 V86 Mode..
請問侯老師, 當我由 DOS 的 Real Mode 進到 Protoect Mode 後開出v86 mode, 請問該 v86 mode 下的系統環境是否和原dos 下的環境是一樣的
嗯我的意思是, 如果我原本在dos下常駐了幾個tsr, 當我由 real mode -> protoect mode -> v86 mode, 該 v86 是否可以 call 我原本在 dos 常駐的程式呢?
如果答案是肯定的那如果我開了好幾個v86, 每一個v86 mode 都會和原dos的環境一樣嗎

謝謝你...

哦..對不起, 我自我介紹一下, 我公司是做光電業的我負責的案子是一個光纖監控系統, 目前我們的系統是dos下做的, 未來將會轉移成linux, 但目前系統一直有一個困難, 因為我們的系統是 dos 做的, 所以記憶體size一直是最深的痛, 曾經想用 watcom c++ dpmi, 但因為部份的drv是由國外廠商開發的, 所以轉移有困擾, 目前我們是用 xms/ems 但因為程式必需經常做swap 使的程式結構十分不好

目前我是想, 直接寫一個 管理程式, 這個程式會在 protoect mode 下run, 部份必需在 dos 下的 drv, 我會利用 v86 來做...

再次感謝你, 如果我實驗成功一定會告訴你..謝謝

 

 

傳送日期: 2002年1月23日 AM 09:16
侯先生﹕你好1
幾年前我研讀過貴譯著《深入淺出MFC》﹐收穫頗豐。最近研讀近著《深度探索C++對象模型〉(華中科技大學出版社﹐2001年五月版)﹐解決我的許多疑惑。這本書很好﹐可能是筆誤﹐有一個小瑕疵﹐可能你找已發現。
在CHAPTER 6 page 263有關數組內存釋放﹐貴著有以下文字﹕
for (int ix =0; ix<elem_count; ++ix)
{
point3d *p = &((Point3d*)ptr)[ix];  //譯注﹕原書為Point *p = ...
delete p;                                            // 恐為筆誤
}
此處英文版作者應該不是筆誤。在實際運用中﹐經常會有不止對象指針類型﹐而釋放內存情況。這時編譯器回自動調用合適的destructor函數(因為所有的desructor均為 virtual function).

 

 


傳送日期: 2002年1月23日 AM 11:56
Deal Mr. Hou,
居住省份(臺灣讀者請寫縣市):台北市內湖區
對侯捷的建議:
目前在公司的工作內容是手機 Protocol stack 的開發
可能會用 C++ 寫 simulator,
買了你的兩本大作 C++ primer, 深度探索 C++物件模型讓我獲益良多
過年期間打算再把 C++物件模型看一遍, 強化 C++的觀念
因為做 simulator 可能會用到 GUI,
故 download 你的深入淺出 MFC電子書

 

 

傳送日期: 2002年1月23日 PM 08:00
候老師﹐您好﹗
我是剛剛開始學習c\c++的﹐瀏覽過您的網站。看到您鼓勵初學者應該先以 console mode(DOS-like)程式為目標﹐於是我按ぴ您在網頁上講的那樣進行設置。我在Dos下設置時頭文件(include)和庫文件(lib)都沒什麼問題﹐可是在我設置編譯器路徑時電腦提示我“ Too many parameters” 是怎麼回事呢﹖我的操作系統是win98第二版(版本號﹕4.10.2222A),編譯器是“BORLAND C++Builder5.0”安裝目錄是“c:\program files\borland”.雖然這是非常初級的問題但俗話說﹕“難者不會﹐會者不難。”所以希望老師能給與解答﹐您說過不給個人回信﹐所以希望老是把原因和解決的方法貼在您的簡體中文的網站上。非常感謝候老師﹗﹗﹗
  

 

 

傳送日期: 2002年1月24日 AM 01:57
侯老師﹕
我最近正在看您的譯作《Essential c++》簡體版﹐這是一本非常棒的書﹐使我節省了很多時間。
我找到一些書中的小問題﹕...
我還有一個建議﹕能否在您的網上放一幅您家中書架的照片。希望您採納﹗

●侯捷回覆:謝謝你的指正,已納入勘誤表。
已加上一些相片


 

 

傳送日期: 2002年1月24日 PM 09:11
Dear Mr.Hu:

我剛剛畢業于華中理工大學計科系,現在在讀研究生。讀到您的《深入淺出MFC》真的是受益匪淺!在看其他書時的猜測居然很多都在您的書中得到了證實!非常感謝!

我對編程很感興趣,但是關于做一名程序員,我卻有些困惑:計算机技術發展可以說是一日千里,每天都有新的技術不斷涌現,書架上的書每天也在翻新,似乎
不管我如何努力,都難以追赶軟件概念制造者們的步伐,更談不上可以有所創新,究竟一個程序員應該如何在追赶最新工具,概念和做在熟悉平台上進行自己的開發之間找到一個最优點?

如果能夠得到您百忙之中的指點,我將不深感激!
祝您一切順利!

●侯捷回覆:基礎學問如萬古長空,開發工具如一朝風月。
不可萬古長空不明一朝風月,不可一朝風月昧卻萬古長空。

 

傳送日期: 2002年1月25日 PM 08:36
侯先生﹕ 您好﹗
我是大陸的一個讀者﹐嗯﹐你的書(深入淺出MFC)確實不錯﹐我覺得更好的是您的表達能力﹐可以說﹐你的文學欣賞和表達能力也一定不錯﹐我也是很喜歡國學的﹐但是現在卻學了工科﹐學電子測量的﹐看到你﹐真有知音之感﹐sigh......
好了﹐祝您身體健康﹐多出好書,先給您拜年了﹗順便問一下﹐
有個叫侯捷的﹐也是您麼

●侯捷回覆:有個叫侯捷的,也是我。


傳送日期: 2002年1月25日 PM 10:00
侯老師﹐您好﹗
今日下載了您的大作《深入淺出MFC》﹐有幸拜讀﹐十分榮幸。
本人亦購買了您的《Essential C++中文版》(簡體)﹐和《C++ Primer》(繁體)﹐及習題集。
居住省份﹕中國山東
給您的建議﹕有些書請儘快出大陸版﹐現在買台灣版的書非常不方便﹗
祝身體健康﹐萬事如意﹗

 

 

傳送日期: 2002年1月26日 PM 08:10
居住省份(臺灣讀者請寫縣市):台灣省雲林縣
對侯捷的建議:
雖然只下載了第一個部分  才看了一點
對於我這個剛剛接觸程式設計的新手來說
MFC可能真的有點難
不過  感覺這本書應該是本很好讓我上手的書
再次感謝您將你寶貴的心血放在網路上讓大家閱讀
本人目前在校擔任本校BBS站站長 對於校內電腦資訊的推廣
有著很深的期望  不知道侯捷大大能否就從大學教授的角度
給我一點建議呢  Thank you very much
最後....拜讀完大作之後   相信對我一定有相當大的幫助
最後  再次感謝....

 

傳送日期: 2002年1月26日 PM 09:39
jjhou﹐您好﹗
請問下載的essential c++源代碼如何才能方便的找到自己要的,是否按題目弄成目錄為好

●侯捷回覆:寫信給 Stanley B. Lippman。

 

 

傳送日期: 2002年1月28日 PM 08:20
侯先生﹕
  您好。我是一名江蘇的計算機科大二學生﹐自從入了此科後﹐我經常可以聽聞您的名號﹐也看過一些您的文章﹐自己的一些初入此門的彷徨得以舒解﹐不勝感謝。
  自從接觸計算機以來﹐我逐漸對它發生興趣﹐特別是編程﹐我希冀自己可以有所發展﹐但
學校中的課程總是那樣緩慢與落後﹐我便想自學一些程序知識﹐隨即遇到許多困難﹐多半是缺乏引導與幫助引起的﹐但我有信心去克服。寫信給您的目的除了感謝﹐也希望得到您的鼓勵。您的時間很寶貴﹐給我兩個字“加油”即可﹐再次感謝。
  我願傾己所能投身技術。

●侯捷回覆:加油。

建立自修基礎,比什麼都重要。首先是路線要正確,態度要正確,選書要正確,避免走太多彎路。侯捷網站上有許多文章,也許能對你帶來幫助。

 

 

傳送日期: 2002年1月28日 PM 08:48
侯先生﹕您好﹗
我是你的一名忠實的讀者﹐雖然看你的書不多﹐但是我是身有體會﹐每當想通一個捆擾自己很久的問題時﹐總是特別感到興奮﹗感到自己不是在浪費時間﹗你的網站我幾乎是天天上﹐前一階段﹐我一直忙於考試﹐所以我想在今年把你的一系列書籍全讀一遍﹐我現在想
麻煩你幫我開一個書單﹐就是應該先讀什麼﹐後讀什麼
我自己讀過了你的《深入淺出MFC》﹐然後又看了MSDN﹐當然是讀了不知道多少遍﹗但總感到自己有點不足﹗在此先表謝意﹗

●侯捷回覆:答案就在侯捷網站。

 

 

 

傳送日期: 2002年1月28日 PM 11:26
侯捷先生﹕
您的書讀了之後真是讓人受益匪淺﹐只可惜像您這樣負責任的作家還是太少﹐我在清華大學讀書的同學告訴我﹐很多清華大學出版社翻譯的書都是以作業的形式﹐由本科生用翻譯軟件翻譯的﹐這樣的書實在與垃圾無異﹗可惜我們的英文水平還不夠好﹐所以只能期望您能多寫/翻譯一些好書了﹕)
祝工作順利﹗

 

 

傳送日期: 2002年1月29日 PM 02:47
畢業學校科系:台大外文系
性別:女
居住省份(臺灣讀者請寫縣市):台北市
侯先生您好:
之前在資策會參加訓練課程時, C++課程用的就是您的這本書, 印象十分深刻.
雖然現在工作上以應用系統的專案開發為主, 並未用到當時所學的東西, 但總希望能對MFC能有更深入的了解....很感謝您能夠開放電子書的free download, 嘉惠更多的學子及對此領域充滿熱誠的人.

 

 

傳送日期: 2002年1月29日 PM 05:47
主旨: Help!!
Dear Mr. Hou:
I'm very interested in C++, I've read:
"Thinking in C++"
"Effective C++ 2/e"
"More Effective C++"
Now,
i'm hungering for "The C++ Standard Library",but i can't get it,even e-book, What can i do? Would you please mail the e-book to me? Thank you very much!!

●侯捷回覆:你有智財權觀念嗎?


傳送日期: 2002年1月29日 PM 01:27
主旨: 我是一個完全的初學者~
> 侯sir您好~:)
> 我是一個對程式語言完全不認識的初學者
> 之前沒有任何學習電腦的經驗,只有上過一點資訊概論而已
> 我目前大二,讀的是跟電腦幾乎沒有關聯的環境工程
> 會想要讀程式語言,是因為興趣吧
> 因此我到各bbs參考網友的意見,才聽聞您的大名
> 我也在您的網站的答客問中看到有人也是跟我一樣
> 的初學者想自己學
> 而週遭又沒有朋友是走這一方面的人無人可以請教如何入門
> 因此我想把我的想法告訴侯sir
> 希望侯sir能給予我一點意見~
>
> 之前有先問過到底是該先學C還是C++
> 後來我決定直接學C++
> 這也是從您的網站的答客問看到後決定的
> 而且現在剛好又很好的教材可以讀~
> 我的想法是以下列幾本書作為入門用
> C++primer
> C++How to Program
> C++Programimg Language
> 熟悉以後再讀Effectine C++和more Effective
> C++和Essential C++
> 至於要先讀前三本的哪一本,我也還不確定
> (我也先找好比較便宜齊全的書局了)
> 因為我是一個對程式語言完全不懂的人
> 也許先讀我比較看的懂的那本,再互相對照查閱吧
> 不過這方法好像不太好,我也想過直接讀C++primer
> 有不懂的再去問或是找比較淺的書來查就好
>
希望侯sir能在百忙中抽一點點時間來回覆我就好~
> 因為我現在真的是滿徬徨的
> 古人說萬丈高樓平地起,我希望我的起頭就是對的
> 在此先謝謝侯sir! :)
>
> 一個雖完全不懂但很想很想學好C++的學生

●侯捷回覆:侯捷網站上有許多文章就是寫給你看的。

 

 

傳送日期: 2002年1月30日 AM 11:29
前不久下載了先生的<<深入淺出mfc>>,匆匆瀏覽一遍,發覺先生此書確實應該是vc/mfc第一書,對先生將此書免費下載表示敬意,有您這樣傑出、思想崇高的人該是民族之幸了﹐真希望能獨到您的《閱讀源碼、剖析源碼的經驗》。
湖南長沙

 

 

傳送日期: 2002年1月29日 PM 02:50
主旨: 關於C++ Standard Library與寬字元的疑問
侯 老師您好:
最近在閱讀您的譯作,Essential C++及C++ Primer,關於vector這個container template類別,
我寫一小程式去測試它,如下:

#include <iostream>
#include <vector>

using namespace std;

typedef struct _WBook {
  int num;
  wchar_t name[80];
} WBook;

typedef struct _ABook {
  int num;
  char name[80];
} ABook;


int main()
{
  WBook wb[3] =
  {
    { 1, L"姓名1"},
    { 2, L"姓名2"},
    { 3, L"姓名3"}
  };
  vector<WBook> vec_wb(wb, wb+3);
  for(int ix = 0; ix < vec_wb.size(); ++ix)
    cout << vec_wb[ix].name << '\n';
  ///////////////////////////////////////////////////////////////
  ABook ab[3] =
  {
    { 1, "Name1"},
    { 2, "Name2"},
    { 3, "Name3"}
  };

  vector<ABook> vec_ab(ab, ab+3);
  for(ix = 0; ix < vec_ab.size(); ++ix)
      cout << vec_ab[ix].name << '\n';

  return 0;
}

輸出:
00420144
004201E8
0042028C
Name1
Name2
Name3

顯然,
在vector裡放寬字元的物件會造成錯誤,是否因為vector這個container不能存放寬字元呢?謝謝您抽空看我的信件。

●侯捷回覆:我從沒注意過寬字元的問題。這個程式在 VC6, CB5, GCC2.91 皆跑出上述結果。此刻我沒有能力回答你,不過我想一旦我了解 L"xxx" 的奧秘後,應該能就 STL source 的基礎,找出答案。謝謝你這個題目。找到答案後我會回到這裡作答。



 

武漢傳送日期: 2002年1月30日 PM 04:12
主旨: 感謝侯先生
侯先生你好
我兩年來一直想買"深入淺出 MFC " 但在台灣都買不到,後來託朋友到大陸旅遊時才買到
你真的寫的很好,Visual C++,在操作上常令人不知從何下手。看完你的書就變成很簡單。
我受益很多。現在我正在閱讀你翻譯的 Essential COM 。你翻的很好,句句都值得推敲,
現在我第二章已看完。想先跳去看 Inside COM再回來研讀後半部。
我想請教的是聽說您以前有翻譯 David所著的 Inside Visual C++,不知道你那裡是否有餘書
如有的話。我想郵購。謝謝

●侯捷回覆:你託朋友到大陸旅遊時買到的是簡體版,習慣嗎?

沒想到竟發生這樣的事。臺灣作者的書,在大陸受到廣泛歡迎,在臺灣卻絕版了。臺灣讀者竟得大費周章地從大陸購買簡體版,再大費周章地習慣簡體字和陌生的科技術語。

核心技術類書在兩岸的命運,令我為臺灣捏把汗。

這些年來一直有《深入淺出MFC》的需求。絕版的主要原因是本書出版公司(松崗)和計算機技術書籍市場脫節,看不清楚需求也聽不清楚讀者聲音。

這個對臺灣讀者尷尬而不公平的情況不會存在太久。《深入淺出MFC》2e 探索的版本是 VC5 & MFC4.2,中間歷經 VC6 & MFC4.21,如今 VC7 & MFC7 即將上市,我也許該為《深入淺出MFC》寫新版了。雖然 MFC 核心改變不大,經過這麼長的時間,也還是有相當必要把書籍修一修,把執行畫面換一換,把過去未交待清楚的問題再加強,對 MFC7 新性質做個交待。此刻我無法給時間點,但新版念頭確實在我心中萌了芽。當然,這次我會慎選出版夥伴 :)

對於大陸讀者,繁體版新版完成日起,我保證在100天內讓各位看到簡體版。100天時間用於大陸出版事宜,以及尋找適當轉譯者將臺灣術語轉譯為大陸術語。書很厚,需要100天。

again,此刻我無法給出時間點。

 

 

傳送日期: 2002年1月30日 PM 10:27
居住省份(臺灣讀者請寫縣市):台北縣蘆洲市
對侯捷的建議:
  候老師您好,很佩服您的功力,我該如何才能達到像您這樣的程度呢?對於電腦一直有著極深的興趣,但接觸愈多,愈感到自己的渺小,我該如何選定自己的方向,走出一片天呢?資訊世界就如茫茫大海,讓人不知不覺的就陷入汪洋之中,不知如何是好!
  我目前有在上元智的碩士學分班,但
似乎候老師已不任職於元智了,是這樣嗎?可否請問候老師一個問題,那就是如果我要撰寫顯示卡的驅動程式,我該如何入門呢?又該參考那些書藉呢?
  感謝您撥空看了我的信,再次向您致意!


●侯捷回覆:每學年第二學期,我固定在元智大學資訊系開一門課。目前仍然如此

 

 

 

傳送日期: 2002年1月31日 AM 10:37
尊敬的候老師﹐您好。冒昧地打攪您﹐請原諒。
我是一名程序員(如果可以這麼說的話)﹐99年大學畢業之後﹐來到了北京做軟件。現在已經工作兩年半了。最近我遇到了一些難處﹐可以說是人生道路上的一個轉折點﹐我百思不得其解﹐在程序員雜誌上看到了您的文章。我相信您能為我指出一條明路。

我是一個東北大學自動控制系畢業的學生﹐經過兩年多的編程實踐﹐我發現了自己有很多不足﹐也深深地愛上了程序員這個工作﹐眼前﹐就有一個很好的公司在等待ぴ我﹐可是﹐
我不知道是應該進學校深造基礎課﹐彌補本科學習的不足﹐還是繼續工作呢﹖以您的觀點來看﹐對於一個程序員來說﹐是不是掌握了某種編程語言的語法﹐能夠熟練地應用﹐就算是合格了呢﹖如果想成為一個高手﹐有沒有必要進課堂學習計算機技術的基礎呢﹖(比如﹐數據結構﹐操作系統﹐編譯原理等﹐在您的工作中﹐您覺得這些課程確實對自己很有幫助麼﹖)

我覺得從發展的角度來看﹐即使我現在也許可以獨當一面﹐可是由於基礎的不足﹐我可能沒有辦法編出來更高水平的程序﹐競爭不過那些科班出身的程序員們。可是﹐
我又不知道是不是現實中﹐基礎知識真的那麼重要﹖是不是會成為更高發展的羈絆﹖因為﹐好像好多高手﹐都不是計算機專業出身的﹐包括您在內。我是真的很矛盾。可能一個是短期利益﹐一個長遠利益的問題吧﹖

另外﹐
程序員將來的出路在哪裡呢﹖也許歲數大了﹐只能在管理﹐策劃上進行突破了吧﹖
百忙之中﹐很抱歉打擾您。等待ぴ您的回復。謝謝。
一個最近比較頭痛的青年

●侯捷回覆:我永遠無法給「升學或就業」的立即建議,那涉及當事人的許多狀況,只有當事人自己才有足夠的資訊。

「對於一個程序員來說﹐是不是掌握了某種編程語言的語法﹐能夠熟練地應用﹐就算是合格了呢﹖」程式語言是程式員最最基礎的功夫,必須熟練它掌握它;但若只是如此,編寫不出好程式、大程式。大家都會說中文,可有些人旁徵博引,左右逢源,字字珠璣,文思雋永,這是為什麼?功夫在語言之外!

語言是首要條件,但不是決勝條件。功夫在語言之外,決勝在語言之外。

「如果想成為一個高手﹐有沒有必要進課堂學習計算機技術的基礎呢﹖(比如﹐數據結構﹐操作系統﹐編譯原理等﹐在您的工作中﹐您覺得這些課程確實對自己很有幫助麼﹖)」PASCAL 語言的發明人 Niklaus Worth 博士說:Programming = Data Structures + Algorithms,這兩門功課非常非常重要。操作系統(你的工作平台)也有必要深入。至於編譯原理,運用在工作上的機會比較少。

基本功有學習的必要,但不一定得在課堂上學習。書籍是你最好的、長長久久的老師。有些課程需要基礎,基礎又需要基礎。迷霧需要點撥,有位好老師是最幸福的。

我又不知道是不是現實中﹐基礎知識真的那麼重要﹖是不是會成為更高發展的羈絆﹖因為﹐好像好多高手﹐都不是計算機專業出身的﹐包括您在內。」你需要的基礎知識,視你選擇的路而定。任何技術路線,都有其基礎知識,而它們都很重要。好多高手都不是計算機專業出身,但有更多高手是計算機專業出身。你認為侯捷是高手,但在許多絕對的計算機專業領域(只有科班人才會接觸的科目)裡,我的基礎薄弱(這說明了「弱水三千取一瓢飲」的重要)。我並不強調出身(我對那種東西嗤之以鼻),但該有的訓練必須要有。

讓我再強調一次,可以上課學習,可以旁聽學習,可以自修學習。學習和拿學分拿文憑是兩回事。

「程序員將來的出路在哪裡呢」。你把你的事做好,自然就有出路。景氣差也有人賺大錢,景氣好也有人賠光光。大家別再擔心這種事了行嗎?

 

 

傳送日期: 2002年1月31日 PM 07:48
候先生,您好!
我在網上下載了您的圖書:深入淺出MFC。
居住省份:現住上海,原籍江蘇鎮江
建議:我覺得我還是沒有提建議的資格,不好意思。自己對於C++知之甚少,現在纔剛剛起步。
在《程序員》雜志拜讀先生的文章,很是佩服您對技術的看法。畢業後一直在從事PHP的開發,隨著網絡泡沫的破滅,我又在重新考慮自己的方向,主要是選擇JAVA還是VC。先生的文章讓我茅塞頓開,我還是應該潛心抓好基本功。

 

 



傳送日期: 2002年1月31日 PM 10:10
居住省份(臺灣讀者請寫縣市):三重
對侯捷的建議:
看了你的書,真的很佩服你,對資訊這份的熱忱。
讓我覺得自己該更加好好的充實自己。
想必您一定花相當多的工夫在學習各種新事物吧?
真的很謝謝您讓我們對程式及其精神有相當充份的了解。


 

 

傳送日期: 2002年1月31日 PM 11:53
候老師﹕
你好﹗我是長春吉林工業大學的學生。看你的書《深入淺出MFC》﹐受益不淺。不過這本書是實驗室公用的﹐我在書店也看到有(一堆﹐據我初步估計有28本)﹐當時想實驗室有就沒買。在看完你的書後(也就是到書店後的第三天)﹐我決定要收藏之﹐結果到書店一看沒有了﹗問一書店管理書的店員﹐他說這本書很暢銷已經賣完了﹐我才發覺和我看法相同的人大有人在﹐候老師也可以感到欣慰了。
不過我最喜歡的還是老師的無責任書評和散文。老師文筆幽默﹐還講故事﹐同時講些學習生活的道理﹐讓我對自己的人生觀有了信心。
我的問題是﹕哪個“一字之差﹐五百世輪迴”的故事裡﹐我真的不能深刻理解“不落因果”和“不昧因果”的區別以及他們包含的深意﹐老師能否用白話為我翻譯一下下﹗呵呵﹐沒空就算了。

●侯捷回覆:“不落因果”不受因果影響“不昧因果”不違背因果而行。即使大修行人也不能擺脫因果,他們所以瀟洒自在,只因物事了然,通權達變,不違背因果而行。你把這個意思套回原文,便當理解其義。我對佛法全無研究。以上全是粗陋看法。