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

傳送日期: 2001年7月31日 PM 11:41

侯老師您好﹕
您好﹐偶然間來到您網上的家。看到了那篇“錢塘煙雨浙江潮”﹐無論是寫的內容還是我看到的時機也許都說明我和您有緣。我現在就業的地方如同那位程序員所在的公司一樣﹐而且公司昨天許諾給我的一個項目﹐今天被拿掉了﹐它們沒有任何歉意也沒有充份的理由﹐於是我點兒心灰意懶了。看到那篇文章後﹐我想也許我該寫信給您。
我想借工作空閑的機會學習使用Rational Rose並且深入的學習UML﹐但是我也想學習TCP/IP﹐和Win32的程序設計。我有很好的C語言底子﹐但是沒有學習過VC和Windows程序設計。我對於電子商務方面比較熟﹐但是我覺得現在沒有用武之地而且我覺得我太欠根基﹐如果能夠熟練的掌握Win32的編程我會充滿信心。對於拋棄編程作系統分析﹐我也很想往﹐但是我總覺得在進行這個之前需要一些鋪墊﹐我現在的水平是否可以直接去學習或從事這個工作我沒有信心。
所以﹐我想請教﹐您是如何看待這件事的呢﹖您認為我該先做什麼呢﹖我又該如何看待我的公司呢﹖
祝﹕身體健康﹐萬事盛意

●侯捷回覆:基礎打好非常重要。但是人一旦脫離了學生時期,進入社會,便要開始承擔生活,承擔責任。所以,從工作中學習也很重要。這其中的選擇與比例,只有你自己才能根據自己的情況拿捏。

 

 

傳送日期: 2001年7月30日 PM 06:00
先生你好, 我是大陸的讀者
請問哪裡能買到你推薦的書
1. Effective C++ 2/e, by Scott Meyers.
2. More Effective C++ 2/e, by Scott Meyers.
3. Exceptional C++, by Herb Sutter.
4. Design Patterns, by Gamma, etc.
還有, 很多人說<<thinking in c++>>很不錯,我很難說它不好,但是它的中譯本實在是太差,和金山詞霸翻譯的效果差不多.您如果有空,就翻譯一下吧,我估計到您翻譯出來的時候是用不上了,但可以造福很多人.眼前的我就被鱉足的翻譯苦惱ぴ.
祝快樂﹗


 

 

傳送日期: 2001年7月30日 PM 04:41
候捷,您好!
我下載了您的《深入淺出MFC 2e》,確實是一本好書,讓市面上的其他VC方面的譯作不能相提並論!現在大陸的圖書市場不是很理想,基礎書籍比比皆是,一本又一本的VC書,掂來掂去都是差不多的內容,很少涉及核心的,入門之后再想提高,求師無門。可能大陸的眾多讀者無不希望,您能將更多的好書拿到大陸來出版,而且期盼之情切切!!希望候捷先生能夠好好的考慮一下。

看了您的《深入淺出MFC 2e》電子版我發覺得現在兩岸的文化背景差異很大,很多東西讀起來有點拗口,最主要的是我更喜歡紙版的圖書,所以,我很快買了一本。還有您的《深度探索C++對象模型》我也打算馬上就買。當然希望還有您的更多的好書!

居住省份:四川省成都市


 

 

傳送日期: 2001年7月27日 PM 11:30
侯先生﹕
拜讀您譯的"深度探索C++對象模型"(華中科技大學出版社)時﹐有一疑問﹕(p133,下方的4句例程) 按照我的理解﹐例程(4)﹐即&Derived::val2是不可能為0的﹐否則﹕
Derived a;
int Derived::*pOffset;
pOffset = &Derived::val1;
a.*pOffset = 5; //(a),即 a.val1 = 5;

pOffset = &Derived::val2;
a.*pOffset = 10; //(b),即a.val2 = 10;
如果&Derived::val1和&Derived::val2都為0的話﹐(a)和(b)豈不是無法區分﹖

果然﹐按照p133上的寫法﹐
printf("&Derived::val2 = %p \n",&Derived::val2);
確實打印出0(VC++6.0)﹐
但﹕
pOffset = &Derived::val2;
printf("%p\n",pOffset);
卻打印出4。

無法知道這是什麼原因﹐還請先生釋疑。



 

傳送日期: 2001年7月27日 PM 06:12
侯老師:
你好!我是大陸河南省的一名畢業生,找工作的時候老闆沒說要用VC,我以前僅對C語言有一些皮毛,C++也是如此,但是既然來了,在出去找工作,也很麻煩,就打算學習了!老闆推薦了一本書,就是您的深入淺出MFC,看了前面的兩章,我已經決定拜您為師了,您的書是我見過的翻譯最好的,但是後面的我還不敢盲目的去看,因?我聽同事說,要是沒找好切入點,很容易對VC迷茫的!因此懇請侯老師能給我推薦一本書,先謝過了!

●侯捷網站,無責任書評3,97/02 MFC 4 大天王



傳送日期: 2001年7月27日 PM 02:25
居住省份(台灣讀者請寫縣市)﹕暫在北京
對侯捷的建議﹕
先生的大作以及英名早有所聞﹐只因現下不做Windows編程嘗試﹐終日混在Unix世界中﹐所以從未認真讀過先生的這些書籍﹐偶或翻之。實在無甚好建議﹐蓋因無從議起﹐:-)

拜讀過<<迷時師度、悟時自度>>﹐很受益。

先生聽說過W.Richard Stevens否﹖在Windows編程的華人圈裡﹐先生給我的感覺和Stevens一樣﹐都是那種很樸實無華﹐甚少做作的人。一是一﹐二是二﹐不驕不矯。

我選擇了Unix﹐未能和先生同行于另外一條充滿坎坷而又不失樂趣的道路。雖然談不上後悔﹐畢竟我深切嚮往Dennis Ritchie 和 Ken Thompson留下傳奇﹐可如果真有來生﹐還是很想能和先生同行一次。
祝愉快

 

 

傳送日期: 2001年7月26日 PM 09:10
jjhou﹐您好﹗
居住省份﹕貴州
對侯捷的建議﹕侯捷先生﹐我在您的網站上下載了《深入淺出MFC》﹐雖然我已經有簡體紙版﹐但是電子版更利於索引﹐謝謝你侯捷先生。我不是科班出生的﹐以前也曾給您寫信﹐謝謝您在信中對我提出問題的回答。說實話﹐看ぴ科班出身的人後很堅實的基礎﹐實在很擔心自己做PROGRAMING是否還有前途﹐不過幸運的是我還在停止學習。只是有時候走的彎路太多。就好像在沒有什麼sdk的基礎上就開始看 《深入淺出MFC》結果是頭破血流。又重新開始學習sdk。唉﹐我們這種自學的沒有一個指路人真的很難﹐不過還有現在找到了侯捷老師。但是
老師的書在大陸實在太少﹐而大陸本身又難求好書……真是遺憾。




傳送日期: 2001年7月25日 PM 04:25
老師:
您好, 之前購買了您所譯的 Essential C++ 中文版, 覺得受益非淺, 由於想更深入解 C++, 於是又購買了您所譯的 C++ Primer 中文版和題解,目前研讀至第六章, 流暢架構加上老師您深厚的譯書功力, 讓我對 C++ 有更深入認識,唯一美中不足的是 souce code 無法直接 compile , 我上網看過修改方式, 可是可能是我的功力不足, 所以總是無法通過 Microsoft Visual C++ 的編譯,不知道目前是否有 Microsoft Visual C++ 6.0 " 版本 " 的 source code 呢 ?最後謝謝老師對學術界所做的努力, 讓我們可以更快速的學習新的技術.

●侯捷回覆:這本書講的是 Standard C++ ,原作者 L&L 並沒有特別針對哪一家編譯器準備專屬範例版本。我個人額外提供了 C++ Primer 的 附錄範例檢測 以及 C++ 標準與實作之間兩份文章,對於 VC6, BCB4, GCC2.91 for-Windows三種編譯器在這本書上的表現做一份整理。我只能為讀者做到這樣。

 

 

 

傳送日期: 2001年7月25日 PM 12:21
侯老師﹕你好﹗
我本人是一名計算機學生﹐現如今學校所開的課程根本不能滿足我們的需要﹐我想請問你對當今社會上的一些東西﹐我想學﹐但又不知道如何來選擇﹖
比如象C、C++、VC等等﹐對於這些是不是哪個好些﹖學哪個有用些。

有些人認為考程序員還不如考微軟的認證考試﹐他們說微軟的認證考試比程序員﹐高程要好﹐社會上好像看重微軟的認證。您是怎麼樣看待這個的呢﹖謝謝﹗﹗
一個計算機愛好者

●侯捷回覆:從本質上講,學歷、執照、認證統統不重要,實力最重要。但學歷、執照、認證多少反映某種實力,這是它們的價值所在。

如果我要用人,我會親自出題,過得了我的關,就是(才是)我要的人。

學歷、執照、認證這一類外在東西,究竟誰比較「有價值」,這和當地環境、職場文化有絕大關係。侯捷並非住在大陸,所以絕對無法知道這些證書誰比較有「錢途」(提問者想知道的無非是「錢途」問題)。

我想反問這位同學,以及所有曾經問過我這類問題的大陸朋友,各位可曾覺得對一個住在臺灣的人問 這種問題,很是天真?如果我給出明確的回答,一定是我在胡說八道。

我這麼說絕非是嘲諷各位。各位把我當朋友,才會問我這類問題。正因為我也把各位當朋友,所以我願意說出心底話:問問題之前,先想一想。有些問題,前輩經驗的確可能帶來幫助,甚至帶來巨大的啟示,有些問題,得不到答案是正常,得到了答案,卻往往是沒有用的垃圾。

 



傳送日期: 2001年7月25日 AM 12:00
侯先生:您好
看到有朋友寫信問程序員30歲門檻的問題﹐網上也有很多相關的討論﹐我個人一直對這個問題不太感冒(大陸流行語﹐意思是感興趣 :@) like a pig's smiling)﹐也不太服氣30歲後干不動的說法﹐也不認同技術領導一定不編程的提法。以下文字摘自微軟中國研究院前任院長﹐現微軟高級副總裁李開復先生《一封寫給中國學生的信》﹕
“我的老闆 - Rick Rashid博士是目前微軟公司主管研究的高級副總裁﹐他已經功成名就﹐卻始終保持ぴ一顆學習和進取的心。現在﹐他每年仍然編寫大約50,000行程序。他認為﹕用最新的技術編程可以使他保持對計算機最前沿技術的敏感﹐使自己能夠不斷進步。今天﹐有些博士生帶ぴ低年級的本科生和碩士生做項目﹐就自滿地認為自己已經沒有必要再編程了。其實﹐這樣的做法是很不明智的。”
(該文給侯先生一併附上﹐其他讀者可以訪問微軟中國研究院網站﹐文章URL為﹕http://www.microsoft.com/china/research/kaifu/viewpoint/2000-2-kfviewpoint.asp。
好網站﹐有大量世界級的論文和研究方法講座和介紹微軟技術節等等的有趣文章。我總覺得不要美國律師一調查﹐我們也跟ぴ搖旗吶喊﹐仿彿編不出來好程序就是因為undocumented,其實他們公佈出來的東西已經非常有價值了﹐winner is part of the answer, loser is part of the problem)
反正我是年輕時編程﹐養家糊口﹔老了編程﹐預防老年痴獃﹐延年益壽。:@)
祝﹕全家幸福。



 

傳送日期: 2001年7月24日 PM 02:52
侯先生:
您好!可惜以前沒有看到你的書,你真是我們的財富!
居住省份(台灣讀者請寫縣市)﹕北京
對侯捷的建議﹕以後繼續多出好書

 


傳送日期: 2001年7月24日 PM 02:52
侯大俠:
我原來是做硬件的,現在急著換另一工作----VC數據庫的訪問,我只有一點C++及VC界面的知識.請問:
1.從那裡開始:從控件使用開始?從VC運行機製開始?直接從數據庫訪問開始?
2.您對這些很熟,推薦幾本書吧!
急等回信!
謝謝!



 

傳送日期: 2001年7月24日 AM 10:00
我在今日下載了先生的Dissecting MFC 2/e。特將先生要求的信息傳去。其實我已購買了先生大作《深入淺出MFC》(華中科技大學出版)簡體版。下載此電子文檔只是為了在沒有帶書的情況下方便閱讀。我本人是從事計算機教學工作的(微軟認證教師MCT)﹐所以深感先生的認真負責與誨人不倦﹐至於技術的博大精深﹐就更不用說了。我非常著迷于中國禪宗﹐先生在書中的表述時常透出禪的意境﹐很對我的胃口﹐因此也借此機會向先生表示敬意與謝意。
居住省份﹕中國廣東省廣州市
對侯捷的建議﹕多在大陸出書



 

傳送日期: 2001年7月23日 PM 06:34
侯先生﹕您好﹗
我是西安交通大學的一名學生﹐您的《深入淺出MFC》是我在最缺貨源的情況下跑遍西安才買到的﹐這本書我相當珍惜﹐給我的幫助也是不能用言語來表達的﹐感謝您給我們這些在Windows編程的汪洋大海中奮力掙扎的人們注入新的活力。

最近在做論文﹐有些問題很難解決﹐想向您請教一下﹐如果您能稍微指點一二﹐我也是感激不盡。我要做一MDI應用程序﹐由於有各種不同的文檔和視圖類型﹐擬建立多個文檔模板﹐分為幾種子窗口(CMDIChildWnd)類型﹐有的子窗口類型中還需不同視圖類型窗口的切分﹐有的子窗口類型為數據庫操作視圖﹐那如何在MDI中實現各種子窗口(也即相應文檔模板)的切換 ﹖
另﹐在某個子窗口類型(也即相應的文檔模板中)想要做一個類似Powerpoint的結構﹐切分視圖窗口﹐左側為樹型結構控件﹐點擊各分支則調用相應的應用程序﹐該種應用程序是用Authorware製作的多媒體 .exe程序。現在關鍵是如何使該應用程序在右側的分窗口中顯示。這涉及到控制應用程 序在窗口中顯示的問題。
再次感謝您

您的一名忠實讀者


 

 

傳送日期: 2001年7月23日 PM 02:40
侯先生﹕
一日偶在網上看到這樣一幅貼子﹐有同感﹐希望能為您 的翻譯事業帶來一點外來批評的動力﹐呵﹐毛主席他老人家都我們說是批評能使人進步噢!

可能語言有點衝動﹐年輕人嘛﹐可以原諒的嘛﹐希望侯先生不要生氣﹐其實文中說的那句我也認為蠻有理的﹐
“另外﹐原著裡有一些錯誤﹐你翻譯時改了不就行了﹐圖表的文字說明不合適﹐你調整一下不就行了﹐只要能讓讀者明白作者的意思就行了。可你還要在所有的地方把錯的列出來﹐說什麼“此處原為xxx,恐為筆誤”之類的東西﹐看起來好像很謙虛﹐很實事求是﹐其實卻給人一種孔雀開屏﹐自以為是的感覺。就算你實在要列出來﹐表明自己翻譯時還做了很多額外的工作﹐抑或是給有原著的讀者一個明白的交代﹐你也可以在列在附錄﹐前言裡﹐甚至專闢一章也行。你不為讀者ぴ想﹐只是為了顯示自己的水平﹐就偏偏要列在正文裡﹐不時打斷讀者的思路﹐干擾讀者的視線﹐只會令讀者厭惡的﹗”是呀﹐如果能列在附錄或另起一行﹐是不是更好一些呢﹖我看這樣是不是能讓人更感覺先生您治學嚴謹一些呢﹖
呵呵﹐希望先生不要怪我罷﹐說俺多事---哼﹐老夫我下面的fans多﹐你哪門子出來的---。
祝先生﹕好﹗

主  題﹕沽名釣譽﹐名不符實﹐我今後再也不買侯捷的書了﹗﹗﹗
所屬論壇﹕Visual C++
發表時間﹕2001-7-23 14:28:41

看到“程序員”雜誌和CSDN對侯捷及其譯作的大力推薦﹐很久沒有買過書的我終於忍不住在上個星期六上午到書店買了一本“Inside the C++ Object Model"﹐耐著性子直到星期天下午看完﹐實在是越看越憋氣﹐越看越窩火﹐心裡一口悶氣﹐如梗在喉﹐不吐不快。

這本書的內容的確不錯﹐可翻譯得真不是個東西﹐“代碼”譯成“碼”﹐“進程”譯成“行程”...。很多明明能夠翻譯出來的術語例如虛函數﹐成員初始化列表﹐估計譯者水平不夠﹐全部不譯﹐直接寫英文﹐只弄得一個句子裡面中文之間夾雜英文﹐英文之間又夾雜中文﹐大腦不在中英文之間切換個好幾次﹐根本就別想把一句順順噹噹的看完。最糟糕的是﹐估計譯者的語文-國文水平並不怎麼樣﹐基本上所有的句子讀ぴ都給人一種很彆扭的感覺﹐總覺得哪兒不對﹐總覺得有點語法或者習慣用法上的問題。可以這麼說﹐整整一本書﹐沒有一頁是讓我舒舒服服﹐順順暢暢的讀完的。另外﹐原著裡有一些錯誤﹐你翻譯時改了不就行了﹐圖表的文字說明不合適﹐你調整一下不就行了﹐只要能讓讀者明白作者的意思就行了。可你還要在所有的地方把錯的列出來﹐說什麼“此處原為xxx,恐為筆誤”之類的東西﹐看起來好像很謙虛﹐很實事求是﹐其實卻給人一種孔雀開屏﹐自以為是的感覺。就算你實在要列出來﹐表明自己翻譯時還做了很多額外的工作﹐抑或是給有原著的讀者一個明白的交代﹐你也可以在列在附錄﹐前言裡﹐甚至專闢一章也行。你不為讀者著想﹐只是為了顯示自己的水平﹐就偏偏要列在正文裡﹐不時打斷讀者的思路﹐干擾讀者的視線﹐只會令讀者厭惡的﹗

這麼好的一本書﹐就這樣給侯捷蹧蹋了啊﹗難道我朗朗神州﹐就找不出幾個人﹐有能力有時間﹐來翻譯這些國外的經典書籍﹐卻讓侯捷等沽名釣譽﹐浪得虛名之徒﹐橫行無忌﹐壞了我中華學術翻譯界的名聲﹗﹗﹗

●侯捷回覆:帖文的主人,以及轉信的先生,可能買書從來不看序文、譯序、導讀。

毛主席不是說過嗎,沒有調查,就沒有發言權 :)

下面是《深度探索C++對象模型》譯序的最後一段:

請注意:原文本有大大小小約 80~90 個筆誤。有的無傷大雅,有的影響閱讀順暢甚鉅(如前後文所用符號不一致、內文與圖形所用符號不一致 -- 甚至因而導至圖片的文字解釋不正確)。我已在第0章(譯者的話)列出所有我找到的錯誤 。此外,某些場合我還會在錯誤出現之處再加註,表示原文內容為何。這麼做不是畫蛇添足,也不為彰顯什麼。我知道有些讀者拿著原文書和中譯書對照著看,我把原書錯誤加註出來,可免讀者懷疑是否我打錯字或是譯錯了。另一方面也是為了文責自負......萬一 Lippman 是對的而 J.J.Hou 錯了呢 ?! 我雖有相當把握,還是希望明白攤開來讓讀者檢驗。

下面是《深度探索C++對象模型》導讀(譯者的話)其中一段:

太多朋友告訴我,他們閱讀中文電腦書籍,不論是著作或譯作,最大的閱讀困難在於一大堆沒有標準譯名的技術名詞或習慣用語(至於那些誤謬不知所云的奇怪作品當然本就不在考慮之列)。其實,就算國立編譯館有統一譯名(或曾有過,誰知道?),流通於工業界與學術界之間的還是原文名詞與術語。

對於工程師,我希望我所寫的書和我所譯的書能夠讓各位讀來通體順暢;對於學生,我還希望多發揮一點引導的力量,引導各位多使用、多認識原文術語和專有名詞,不要說出像「無模式對話盒(modeless dialog)」這種奇怪的話。

由於本書讀者定位之故,我決定保留大量的原文技術名詞與術語。我清楚地知道,在我們的技術領域裡,研究人員或工程師如何使用這些語彙。 

當然,有些中文譯名夠普遍,也夠有意義,我並不排除使用。其間的挑選與決定,不可避免地帶了點個人色彩。

下面是本書出現的原文名詞(按字母排序)及其意義:...

每個人的閱讀習慣都不相同,每位作者的寫作習慣也都不相同。作者沒有機會挑選讀者(嘆),只有讀者才能夠選擇作者。每個人都應該努力尋求最適合自己風格的書。

侯捷的各種著譯作品一向採用眾多英文術語。請大家仔細了 :)

 

 

 

 

傳送日期: 2001年7月23日 AM 11:30
我是西安交大的學生﹐學計算機﹐大三﹐希望在畢業前能聽到您的指教。
冒昧的提出邀請﹐如果可以﹐我願意與學校聯繫﹐發出正式申請。

●侯捷回覆:打算 2001/10 去一趟大陸,大約是上海, 北京, 武漢三地。如果可以,也很想去西安。但我的時間不允許在大陸停留太久。因此,無法做出結論。

 

 

傳送日期: 2001年7月22日 PM 02:34
侯捷老師﹐您好﹗
我是浙江大學的一名研究生﹐也是你的忠實讀者﹐我認真讀過你的所有文章(包括技術上的和評論性的﹐雖然有的技術文章讀不懂)﹐自覺受益匪淺﹐並為你認真求實的態度所折服﹐認為這是真正做學問的人必備的。

我現在研讀您的譯作《深度探索c++對象模型》﹐發現其中的一個小小的bug,第20頁strcpy(&mumble.pc,string)中第一個參數不對﹐mumble是類名﹐此處應該是對象名才對。而且此句上面有代碼﹕
struct mumble *pmumbl=(struct mumble*)malloc( ......);
所以我覺得此處應該改成﹕strcpy(pmumbl->pc,string)才對﹐請您考慮。

另外希望您能多介紹好書到大陸來﹐有時間能到杭州來﹐這裡有美麗的西湖。
致禮﹗


●侯捷回覆:您的考慮是正確的,立即納入勘誤表。謝謝。
希望有機會一遊杭州。

 

 

傳送日期: 2001年7月22日 AM 07:08
> 您好:
> 偶然間從您的著作中得知可以下載您的電子書, 所以來此收錄您的著
> 作, 也非常感謝您慷慨分享.
> 居住省份(臺灣讀者請寫縣市):高雄市
> 對侯捷的建議:
> 拜讀大作日久, 在書店看到書上出現"候捷"或"候俊傑"兩字時, 很難不
> 駐足翻閱, 更進一步帶回去細細研讀. 我想您的書對我而言最重要的,
> 是"可輕易理解"這一點. (很多書真的是寫了半天看不懂在說什麼)
> 我個人在資訊這行打混有一段歷史了(從開始打工到作正式的RD, 算算到
> 現在有14年了), 後來也研讀這方面科系. 一路走來對台灣的資訊人發
> 展, 多少有些感想. 在這提出一二, 希望您給予指教.
> 近來科技進展快速, 設計研發是愈來愈容易. 一堆VB'' VC Delphi等等的
> 速成設計師愈來愈多. 這樣的情況帶來的正面發展是設計軟體的人多,
> 對軟體的發展取得有正面助益; 讓我覺得負面的一端則是認為這些設計
> 者多少不夠"紮實". 舉個簡單的例子, 這類設計者往往只能解決在程式
> 上邏輯的問題, 當問題不是發生在程式的結構中, 而是發生在系統上(如
> 作業系統問題或Driver不正確等), 就找不出錯誤來了. 不是他們程式寫
> 的不好, 而是對系統的了解太少. 這些情況對我稱之為AP的設計者尚不
> 太嚴重, 因為他們只要專注在程式邏輯及使用者介面上, 就可以解決大
> 部份問題; 而對作"系統"的設計者來說, 就嫌不足了!   而近來這樣認真
> 學習系統的人系統愈來愈少, 不但對系統結構了解不深, 甚至對簡化邏
> 輯或相關演算都不太花腦筋去學. 長久觀之, 我覺得並不是好的現象(除
> 了將來愈來愈不需要這樣的設計者). 至少, 對我來說, 知其然而不知其
> 所以然是很難過的事情.
> 為此, 我本打算花些時間, 把做為一個設計者應知的基礎及程式語言教
> 學等, 寫作成一套儘可能面面俱到的書藉. 但迄今進度少的可憐. 由於
> 鮮少寫作經驗, 我連對內容的安排都不太有把握. 甚至如您所見, 給您
> 的這一封信, 似乎語句都不甚順暢, 想弄出一套淺顯易懂的書真是談何
> 容易. 對您著作及風範, 個人景仰己久, 若能得您指點一二, 幸如何之!
>
> 祝   寫著愉快


●侯捷回覆:RAD 真是「懷璧其罪」呀。

 

 

 

傳送日期: 2001年7月21日 PM 12:35
侯老師﹐您好﹗
我是您的忠實的讀者.我住在大陸這邊的汕頭市,在去年暑假也曾與您通過兩次信,但因為後來升上高三學習緊張而停止了.雖然高三時面臨ぴ高考,但我仍然有訂閱《程序員》雜誌﹐當得知您的《深入淺出MFC》出版之後﹐我生怕慢一點就買不到﹐於是立即在網上訂購﹐同學們都說我瘋了﹐要高考了還顧ぴ這個。終於等到高考結束﹐我迫不及待地讀起《深》﹐終於在昨天﹐我把深的前三章詳細地讀了3遍﹐特別是第三章﹐真是太...獨有的插圖讓我的思路流暢而不用天馬行空地胡亂想象;幽默的語言,獨特的例子更使我心領神會,豁然開朗.僅憑前三章我便能斷定這不是一本好書,而是一本非常好的書!

您說過學習C++/OOP無定式,我是十分讚同的.因為以前沒有人告訴我這條學習路線應該怎麼走,再加上自己的急功近利,所以陰差陽錯便走了這條路子.我是學完C++的語法(語意都還不太了解)就立即學VC++(那時以為VC=MFC),一看傻了眼後又聽人說要先學SDK programming,於是啃了一陣書後又似懂非懂地急ぴ再去干VC,結果忘了一些C++,又回頭去復習,奇怪的是這次居然弄懂了虛擬與多態(基本上),又充滿信心去搞VC,結果碰得鼻青臉腫,信心崩潰.您在《選義按部 考辭就班》中就有一段對學MFC失敗描寫得十分細緻﹐以至我懷疑這是否是您的親身經歷。雖然走了許多彎路﹐但並非無收穫﹐還是值得的。每在受到挫折與感到迷惘時幸能讀到老師您的文章與著作﹐使我重燃鬥志﹐我覺的是幸福﹐感謝您﹗

信有點長﹐希望不會佔用您太多的時間。
祝身體健康﹗


●侯捷回覆:對你的名字沒有印象,但依稀記得有一位汕頭的高中讀者寫過長信給我。
你開始有了收穫,開始走上正確的方向,很好。恭喜你。

傳送日期: 2001年7月21日 PM 06:55
寄件人 同上

侯老師﹐您好﹗
謝謝您的鼓勵,這對我很重要,真的.
我十分期盼您的《多型與虛擬》這本書﹐我敢擔保現在大陸市場上還沒有一本講C++/OOP語意的好書﹐語法書倒是可以“信手拈來”﹐但也很差。我想這不僅是我想要﹐也是大陸廣大讀者所需要的。所以希望能趕快看到它的簡體版。
祝 身體健康﹗

 

 

傳送日期: 2001年7月20日 PM 02:12
我下載了深入淺出mfc﹐謝謝你的書
居住省份(台灣讀者請寫縣市)﹕河南
對侯捷的建議﹕多出好書﹐只要書好﹐價錢貴些也沒有關係


 

傳送日期: 2001年7月20日 PM 12:21
Hello Hou,

I'm a college three student in USST(University of Shanghai Science & Technology,major in Electronics
Information Technoogy. I'm very glad to have a copy of your E-book "Dissecting MFC 2e". Any way
,I just have a skime on it,and your particular writing style made a deeply impression in my mind.I have
read some computer science technology books as "C programing language"(Write by Tan Haoqiang),
"C++ programing language (Write by Qian neng),and "Thinking in C++"(China Machine Press Version,I
havn't finish it,because it maybe a little bit hard to understand for me.)

In my view,the most significative point in your book is the use of English Lang in stead of Chinese Explanation. Science has no motherland,and in today's world technology communication has becoming more and more important .Since I was practising in a multinational corporation these days, I met some America,Korea,Janpan engineers.We can discuss life,recreation,weather and so on. But touching upon
technology,the communication became difficult.While they said some English Lang,I...I mean I just couldn't catch it immediately.In my mind, it's full of their Chinese Explanations but no idea of English Lang.I felt sad...
The world is developing,our country is developing,too.But the disunity technology lang may destroy our development.Though it looks unification domestic,but to the world it's not enough. After all,English is the main science technology communication language around the world.I sincerely wish more and more science technology author could write in international criterion in mainland.

Thanks a lot for your e-book,and I appreciate it very much!
Regards,


 

傳送日期: 2001年7月20日 AM 02:22
我是一位來自天津的讀者﹐我很高興能拜讀您的著作《深入淺出MFC 2e》﹐這是我買的十餘本關於VC及MFC的書中最最好的一本了﹐雖說我的基礎不是很好﹐書中有些精華還不能完全領略﹐但我還是抑制不住給您寫信的衝動﹐哎﹐在大陸向這麼好的書簡直是太少了﹐您的書也只能賣到這一本﹐我非常希望能讀到您更多的書﹐希望以後您能和大陸的出版社多多合作,讓我們能讀到您更多的書﹗

 

 

 

傳送日期: 2001年7月19日 PM 06:18
侯先生﹕您好﹗
看你的書猶如當年讀林語堂﹐總是一看三嘆﹐欲罷不能。當然題材不一樣﹐但有一點共通﹕知道讀者心裡最需要的是什麼。

我是一個程序員﹐業余喜歡玩干支﹐有幸看到您的六字﹕辛丑 丁酉 甲子 對照您的文風體會干支精義﹐是一種樂趣﹐我比您小10歲﹐壬子 丙午 乙酉 戊寅 作為您的學生﹐除了想多讀多買您的書之外﹐我還想“深入淺出”﹐徹底研究您的八字﹐如果您有興趣﹐請告訴我您的出生時辰。

我不知道自己的請求對您來說有無過份﹐如有不當﹐敬請原諒﹐我別無他意﹐喜歡這個罷了。

●侯捷回覆:個人小事,不足為外人道。

 

 

傳送日期: 2001年7月19日 PM 05:48
讀了您的深入淺出MFC後﹐有個很基本的問題﹕
在文檔-視圖中﹐用File/New動態創建對象。可這些對象已經聲明﹐用new就可﹐為什麼還要那麼麻煩呢﹖
個人認為動態創建的對象一般為程序運行時﹐對象為何類還未知曉﹐故為動態。
望不吝賜教。

●侯捷回覆:當你打開一個file,其中記錄了許多  class name 和 object raw data,你該如何根據那些 class name 產生一個 object?然後再以那些 raw data 當做 object 的初值?想一想。仔細想一想。

動態產生 object,當然是使用 new。但是用 if-else 去判斷讀入的 class name,然後做對應的 new 動作,很是笨拙,維護極其不易(當 file 內又多了新的 class name 時)。MFC 的作法是以 macro 包裝上述動作,這就是 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 的故事。

 

 

傳送日期: 2001年7月19日 PM 05:23
侯老師您好﹗

上次我看《深度探索C++對象模型》提了一些問題﹐沒想到您第二天就解答了﹐真讓我又意外又高興﹗今天我又有些問題﹐要再麻煩侯老師了。
-------------------------------------

1)
我發覺自己有個基本的概念沒搞清楚﹕一個父類的指針﹐在指向子類的對象時﹐它的確切所指位置是哪裡﹖
我以前的理解是﹕不管是哪個層次的父類指針﹐都是指向實際所指對象的起始地址。但我看到P115頁後﹐發現以前的理解不對頭﹐而是應該跟父類的實際類型有關。
如: P114-115中的幾個指針:
P114 L18: pv=&v3d;

L23: p2d=&v3d;
L24: p3d=&v3d;

L26: Vertex3d *pv3d;

P115 L2: pv=pv3d;

它們確切的值應是如圖所示的位置﹐對嗎﹖

_______________
p2d,p3d --------> | | <-------- pv3d
| float _x |
|---------------|
| float _y |
|---------------|
| _vptr_Point2d |
|---------------|
| float _z |
|---------------| <--------- pv
| Vertex *next |
|---------------|
| _vptr_Vertex |
|---------------|
| float mumble |
|_______________|

class Vertex3d:
public Point3d,
public Vertex{}v3d;

2)
P103 L10﹕“在一部32位機器中﹐……大小都是8bytes﹐” 是否為 “4bytes”的印刷之誤﹖
因為P105譯注中﹕Concret2 object只是12bytes﹐並沒有padding到16byets。而且32位機器
的話﹐好像也應是 4bytes 吧。
是不是Stanley B. Lippman就這麼寫的﹐侯老師也懶得去細摳它了:)

3)
P108 L14﹕“derived class destructor”是否為“derived class constructor”的印刷之誤?
------------------------------------------------------------------------------------

侯老師﹐我現在已讀到第5章了。因為準備研究生考試暑假就待在學校裡﹐炎炎夏日﹐坐在沒
有風扇的教室裡﹐一邊讀ぴ《離散數學》《數據結構》《算法設計》﹐一邊讀ぴ《深度探索C++對象模型》。兩邊都是滿難啃的書(當然這只是對我個人而言﹐肯定也有讀得很輕鬆的人)﹐但能這麼邊讀邊跟侯老師請教﹐反倒成了一件很開心的事﹐常常是捧ぴ這邊的書很長時間了而沒有去看那邊要考試的書了。

非常羨慕侯老師可以不理會生活的壓力而能潛心讀自己喜歡的書。真心感謝侯老師伴ぴ我一步
一步努力前行﹗

最後祝侯老師身體健康心情愉快﹗


●侯捷回覆:(2) 並沒錯。(3) 原書如此。

 




傳送日期: 2001年7月19日 AM 11:34
居住省份﹕廣東深圳
對侯捷的建議﹕
我很喜歡您譯的作品﹐看過您所有的e-book的第一章﹐覺得不可不買﹐又不知去哪裡買(去不了台灣﹐不然早就買了)﹐ 遺憾遺憾﹗上次我期末考試沒能趕上您為大陸讀者提供書的日子﹐心中失落不已﹗希望您能儘早和大陸的出版社聯合出版您的譯作。期待期待﹗

 

 

 

傳送日期: 2001年7月19日 AM 12:04
侯先生﹕
提起keyboard,是因為想多給您一切鼓勵與支持﹗同時也是表達對您對理想追求的信念表示良好的祝愿﹗表達您對華人的幫助表示內心的感謝。當然這一切僅(謹)只能表我個人心意﹐ 不能像領導那樣子說代表什麼一個群體或組織。

我的電郵只是浪花一朵﹐但海納百川﹐有容乃大﹐眾人拾柴火焰高。(不用回復﹐知道您時間緊貴)

向你致敬﹗﹗﹗
祝身體健康﹐全家歡樂﹗

OOO于上海

 

 

 

傳送日期: 2001年7月18日 PM 09:40
侯捷,您好!
     我叫OOO,畢業於南京大學地球科學系,從中學就很喜歡電腦,我嘛,當然是男的,27歲了,95年畢業後一直在OO市一家電腦製圖公司工作,副經理兼技術主管,公司小,在寫程序時經常被別的事情打斷,但一直堅持了下來。我是在《程序員》雜誌上認識您的,從而對計算機的理論方面(我最薄弱環節)有了新的理解,謝謝,現在正在下載你的《深入淺出MFC》的繁體版,當然,簡體版我也看到,準備買的。謝謝。

 

 

 

傳送日期: 2001年7月18日 PM 09:58
我是元智資管的學生....
最近買了您的書Essential C++想學學C++....
不過卻是一開始就碰壁.....
書上說這適合初學者....可是覺得好像有點難適應.....
是不是應該先看那本Primer 呢??

還有問老師您一個範例的問題.....我照著第二章的範例打為何不能執行???...謝謝!

●侯捷回覆:每個人的情況都不相同。我無法指出哪一本書最適合你。按說 Essential C++「應該是」最適合初學者的書。如果你無法接受 Essential C++,恐怕你無法接受 C++ Primer.

編譯過不了,請到 BBS 論壇上發問。(你忘了 #include 好幾個 header files)

 

 

傳送日期: 2001年7月18日 PM 04:35
尊敬的侯先生﹕
我是中國大陸黑龍江省的一名程序員﹐主要用C++編程。酷愛你的大作﹐不論是您自已寫還是翻譯的。前段時間有幸得到閣下的《深入淺出MFC》和《深度探索C++對象模型》﹐真是愛不釋手﹐從頭到尾讀了數遍﹐解開了我以前的許多疑惑。深深體會到﹐在一個人的成長中﹐如果能得一位有真知灼見又勇于追求探索的老師的教悔和指導﹐那是一種莫大幸福。而閣下正是我夢寐以求的老師。

無奈由於海峽兩岸的局勢至使咫尺之隔竟成海天之遙﹐學生無法當面向先生請教。所以讀一讀先生的大作也算是一種安慰。近來在網上看到先生譯《Effective C++》﹐《More Effective C++》和《Exceptional C++》真是欣喜若狂。我聯繫了國內外許多書店﹐他們都不代理這幾本書。萬般無奈﹐只好向先生求助﹐望先生能在百忙之中抽點時間﹐幫幫學生的忙﹐學生將感激不盡。所需費用一定加倍付給﹐望先生可憐學生。

學生 OOO 頓首

●侯捷回覆:看了你的信,我很感動,但是無奈。這些書的確未在大陸銷售。我無法幫你忙,也無法解決這個問題。這些書籍未在大陸銷售,並非廠商沒有意願,而是其間存在一些難解的問題(不曾體會過商業經營的讀者,一般不易想像其中的複雜和顧慮)。目前CSDN(www.csdn.net)正在進行海外購書意願調查,也許(just maybe)他們會在近期內開始行動。祝願這樣的行動能夠開展,給大家多一個買書機會。

 

 

 


傳送日期: 2001年7月18日 AM 11:40
侯老師您好,

我是一個新竹科學園區的工程師,目前在本公司擔任設計課長一職.
雖然我們部門主要產品是硬體,可是,幾乎人手一本"C++ Primer 中譯本".
C++現在也成了我們部門很重要的一項工具.

自從我開始學C/C++與Windows Programming以後,就跟您在空中結下不解之緣.
而第一次見到您本人是3年前左右在工研院電通所,您到我們所上去上
Windows Programming,當時,我還是個初出茅廬的新手.

每次去天龍書局逛的時候,除了看新書外,就是到”侯捷專櫃”去看看,
其中對我內功增加最多的是"Inside the C++ Object Model"與"虛擬與多形",
以及兩本"Effective C++"系列. (Exceptional C++買了,但是還沒看完).
而"深入淺出MFC"中提到的一些技術更是被我應用到in-house tools上.

雖然知道寫書與譯書都是很辛苦,但是每次在您的網站上看到您的新書
計畫,就會一直注意該書是否已經出了.老實說,有時候等得人很心急.
因此,大概您的書我都有了,而您開放的電子書也理所當然在收集拜讀之列.
目前我是以紙本書學習,電子書查詢,感覺蠻方便的.

為了理想,我將在今年九月去修博士學位,並到某專科資管系任教,可能是教授
程式語言方面的課程.而在您網站上有很多很棒的文章,我認為非常適合給學生
閱讀,除了告訴學生們網站外,還想將您的文章印出來傳閱,希望能得到您的同意.

祝安!


●侯捷回覆:很開心收到您這封信。我們能夠相認於空中,長達數年不輟,是我們的緣份。

寫譯工作,有時候出版日期難以精準掌控。我對讀者感到抱歉。我和大家一樣地努力學習新知,努力充實自己,不一樣的是,我還得將自己的心得整理成一份平順的讀物,設計一個流暢的動線,引導別人學習。因此,我的負荷比單純的學習稍多一些。不過,在技術的應用上,工程師又比我深刻多了,需要花比我更多的時間和精力。所以,呵呵,大家都很努力,都很辛苦 :)

侯捷網站上的所有資料,都歡迎轉發、傳閱、列印。這些心得和大家共享,就是我的本意。

恭喜您有更高階的進修。祝您一切順利。


傳送日期: 2001年7月18日 PM 12:43
發件人同上

真的很同意您的看法,我以前在服役也擔任教官一職,教一些長官雇員電腦方面的操作,自然免不了要編寫講義,要讓這些外行人懂得操作Office或寫Homepage,真的令我很傷腦筋,心中所想的情景,常覺得很難用淺顯明瞭的文字加以表達,來讓讀者有種心領神會喜悅.讓我佩服的是,在閱讀您的文章就讓我常有這種心領神會的喜悅.我蠻會欣賞別人的文字之美的(像是李家同教授的文章是我另一個最愛),但是自己就是寫不出來,也因此更能體會作者的辛勞,所以,我買書是決不吝嗇的,也因此書滿為患了.

我所能給這些寫好書的作者最大鼓勵就是"買"和"推薦",剩下的就只能在心中祝禱這些作者能身體健康,長命百歲.

對了,余秋雨教授也是另外一個我很喜歡的作家,他的書我也幾乎都買了,我特別喜歡"文化苦旅"和"山居筆記",兩本我都讀過兩次,而最近天下文化又節錄兩本書中的文章,搭配了相關的照片,除了四本書,並由余秋雨教授新增註解,也是值得推薦的"好看書".

"千年一嘆"則還沒看完,不過前一陣子看了漢卡克寫的一些關於古文明的書,這正好可以和這本書相互連貫.

您另外有一個讓我由衷欣賞的地方,就是您雖然從事的是技術傳承教育的工作,是一般人認為很高貴脫俗的工作,但是您卻毫不避諱地堅持高品質的作品應該得到高報酬.

說的過分些,謙虛是一個人品德中最卑下的特性.一個事事謙虛的人只能獨善其身,甚而更卑劣者,是為了沽名釣譽.而廣為傳播種善因得善果,並有勇氣將這善果廣佈週知的人,才能兼善天下,因為他的這個舉動使得天下人人樂於為善.

真的謝謝您的許可與祝福.

 

 



傳送日期: 2001年7月18日 PM 02:14
主旨: questions about
inside C++ object model
Dear Mr Hou:
I am one of thousands of ur readers from chinese mainland. i like ur book so much. i'm afraid that on ur machine, u cannot read letters written in chinese GB code. so i write in english.
here below is my basic information.
Name: OOOO
school: South-east University(Nanjing)
major:electric power system and its automation.

The purpose of this letter is to ask ur advice on some issues concerning the book .
question 1: on page 255,there is code: orgin = Point3d::Point3d(orgin).

i think that "orgin=" must be omitted,otherwise it is completely wrong,since there is no return value for a constructor. what's more in Point3d::Point3d(orgin) origin represents this pointer,so orgin is initialized properly.(not by return value at all)
Do u agree with what i said?

question 2: on page 259, i could not figure out what cache_key,pointer mean from the context.can u give me some hints?that's very important because i always try to understande the difference between delete[] and delete. In MSJ C++ Q & A, Paul Dilascia once wrtoe an essay concerning delete[] and delete. he said that if we write

delete p; //if p points to a basic data type array, the code is ok;
//just the same as delete[] p;
// but if p points to a class array,there is serious problem and memory
//leak occurs.
i do an experiment to verify what Paul said and found out that Paul is right. but i donnot know why. can u give me a detailed explanation.

thank u for the pains that u have taken to read my letter. i'm looking forward to ur reply on web site sincerely.

Good health and Good luck
ur reader from Nan! jing

●侯捷回覆:關於第一個問題,我同意你的看法。
關於第二個問題,Scott Meyers 在《Effective C++ 2/e》item5 解釋得不錯。


 

 

傳送日期: 2001年7月18日 PM 01:58
侯老師﹕
近日拜讀了您的譯作“深入探索C++物件對象模型”(簡體中文1版2刷)﹐深受啟發﹐特向您表示謝意。
看過此書的人都知道﹐您為譯此書花了大量心血(首先要自己看懂﹐再讓讀者看懂)﹐但要讓一本艱深的純技術書籍徹底沒有謬誤與疑問﹐則幾乎是不可能的事。不是嗎﹖問題可能出在作者、譯者、出版者任何一方。作為讀者﹐我有權利、亦有義務提出來--在您的網站勘誤表中沒有的錯誤(疑問)﹕

1、這個錯誤是作者的。P136有如下一段﹕
pB.*bx
會被轉換為﹕
&pB->__vbcPoint+(bx-1)
而不是轉換最直接的﹕
&pB+(bx-1)

結合上下文意﹐pB應該是個object﹐而非object pointer。這個“p”用的不是時候。
在若干年前學習C語言時﹐給我印象最深的莫過於二﹕“指針”﹐嗯﹐最難理解﹐尤其是指向指針的指針﹐如果當初沒弄清楚﹐vptr就它識我、我不識它了﹔“運算符的優先級和方向性”﹐不難懂﹐但需要在運用中反復記憶﹐幸虧有一次碰到了“-i++”﹐讓我用心地下了番功夫。
努力沒白費﹐我帶點僥倖地發現了﹕“->”域限定符的優先級大於取址運算符“&”﹐因此上面的寫法是不對的﹐應改為﹕
(&pB)->__vbcPoint+(bx-1)
噢...等等﹐結合上下文意﹐應該是這樣﹕
pB.*bx
會被轉換為﹕
*( (&pB)->__vbcPoint+(bx-1) )
而不是轉換為最直接的﹕
*( &pB+(bx-1) )

◆算是驗證過﹐雖然我這輩子可能都無緣一見__vbcPoint的芳容﹐但運算符優先級可是C++它爹立下的規矩。

2、這個錯誤是出版者的。P64 L-12有如下一行﹕
__result.X::X
X(xx);
應該是﹕
__result.X::X(xx);
◆無須驗證。

3、這個錯誤是作者的。P46 L-15有如下一行﹕
void foo(
const A *pa) {pa->i=1024;}
pa已經限定為指向常量的指針﹐怎麼可以改變其指向區域的內容呢﹖應該去掉const﹐或者這樣﹕
void foo(A* const pa) {pa->i=1024;}
//限定pa為常量。
◆已驗證過。

4、這個建議是我的﹐希望也是您的。P178 L13有如下一行﹕
( *ptr->vptr[(int)pmf] (ptr) );
假定我有一個函數指針void (*pf)()﹐要我調用它嗎﹖好的﹐我一定會這樣寫﹕“(*pf)();”﹐也可能這樣寫﹕“(pf)();”﹐亦可能這樣寫﹕“pf();”﹐但我能這樣寫嗎﹕“( *pf() );”﹖
仔細看看﹕“pf”是一個函數指針﹐“ptr->vptr[(int)pmf]”也是﹐那就用“pf”代替“ptr->vptr[(int)pmf]”做個驗證吧﹕在VC6編譯器下﹐“( *pf() );”將得到“error C2100: illegal indirection”的錯誤信息。
我建議這一行應改為﹕
(*ptr->vptr[(int)pmf]) (ptr);
P179 L10有類似的問題﹐應改為﹕
(*ptr->vptr[pmf.index]) (ptr);
◆也許Lippman的編譯器能正確通過﹖也許這當然不是什麼錯誤。只是“吹毛求疵”這個詞有其發明人﹐自有它的施行者。對待精品就當吹毛求疵。

5、這個﹖﹖﹖是﹖﹖﹖的﹐疑惑卻是我的﹐可能也是大部份讀者的。P122 L7有如下一行﹕
Point2d *p2d=pv3d ? pv3d+pv3d->__vptr_Point3d[-1] : 0;
我那固執殭化的腦筋告訴我﹕從變量命名的不成文規則來講﹐pv3d不會是Point3d object pointer(為何不命名為p3d﹖)﹐而是Vertex3d object pointer(否則聲明Vertex3d做甚﹖)。那麼就應該是這樣了(結合P123 圖3.5b)﹕
Point2d *p2d=pv3d ? pv3d+pv3d->__vptr_Vertex[-1] : 0;
//__vptr_Vertex[-1]才記載ぴ正確的subobject offset
或者這樣﹕
Point2d *p2d=pv3d ? pv3d+pv3d->__vptr_Vertex3d[-1] : 0;
//我連估帶猜地推定必有__vptr_Vertex3d﹐
//它與first base class--Vertex的__vptr_Vertex重疊
P120 L3還有一行﹕
Point2d *p2d=pv3d ? pv3d->__vbcPoint2d : 0;
__vbcPoint2d從何而來﹖我看到“P121 圖3.5a”實現模型中﹐Vertex3d有兩個“Point2d *pPoint2d”﹐內容應該是一樣的﹐它們與__vbcPoint2d是何干系﹖Lippman沒交待清楚(大師就是大師)。
◆我疑惑﹐因為我無從驗證。

運筆(打字)至此﹐斟字酌句﹐煞是辛苦﹐始能小小體會到技術作家心血付出之巨。再次向您表示謝意+=敬意。希望能在您的網站上看到此信+=回復﹐也希望能見到您更多更好的作(譯)品。
中國江蘇 OOO
于2001.7.18

傳送日期: 2001年7月19日 PM 05:08
寄件人 同上

侯老師﹕
您好﹗
看到您網站的來信摘錄﹐有些想法﹐我給我的來信立下了規矩﹕它不應該有可能讓您感到些許壓力的、略顯過份的讚譽﹐不會有茫然無緒、空洞無物、大可遮天、無以應答的問題﹐不會有稍加用心即可求解而毋須再問、讓人有一種接連啃了一百天雞爪之感覺、不勝其答的問題﹐更不會有僅憑個人喜好而橫加指責的評論。有的只是一些經過認真思考的純技術性問題﹐但願老師不會感到浪費自己的眼睛。
這次仍然是針對Inside The C++ Object Model簡版1版2刷之問題。

1、P155 L-4有如下一句話﹕
“一個class只會有一個virtual table。”
◆此話值得商榷﹐起碼它
不適用于多重繼承和虛擬繼承的情況。

2、P180 L2有如下一行﹕
__mptr temp=(0,-1,10727417)
少了個“;”。
◆讓Bjarne去驗證吧。

3、P161最後幾行至P162有如下示例﹕
Base2 *pbase2=new Derived;
......
delete pbase2;
......
......
(*pbase2->vptr[1])(pbase2);
改變為﹕
(*pbase2->vptr[1].faddr)
(pbase2+pbase2->vptr[1].offset);
這一示例讓我感覺到了茫然、煩悶和用腦過度﹐尤其是當我像大多數讀者一樣試圖將其與P165的“圖4.2”結合起來理解的時候。
vptr[1]是什麼﹖destructor是也。pbase2現指向Derived的一個實體的subobject Base2﹐它要調用destructor﹐而destructor是被Derived override過的﹐勢必要先調用Derived的destructor﹐那麼﹐傳進去的this難道不需要向後作調整嗎﹐怎麼能向前呢--“pbase2+pbase2->vptr[1].offset”﹖
當我一廂情願地將這一切都歸咎于Lippman的編譯器而欲跳出此間時﹐我那固執殭化的腦筋卻成功地使我愈陷愈深﹐並且逼迫我不得不請出了我的三位良師--“興趣、侯捷為代表的一群技術作家、自己動手”之老三^-^
//編譯器用的是VC6
#include "stdafx.h"

class A{
public:
float ax,ay,az;
A(){printf("class A constructor.\tAddres:%d\n",this);}
virtual ~A(){}
//A不是今天的主角﹐就讓它簡單點。
};

class B{
public:
float bx,by,bz;
B(){printf("class B constructor.\tAddres:%d\n",this);}
virtual void bf(char *tips){
printf(tips);
printf("%d\n",this);
}
virtual void ovf(char *tips){
printf(tips);
printf("%d\n",this);
}
virtual ~B(){
printf("這裡是B的virtual destructor。this=\t%d\n",this);
}
};

class C:public A,public B{
public:
float cx,cy,cz;
C(){printf("class C constructor.\tAddres:%d\n",this);}
virtual void ovf(char *tips){
printf(tips);
printf("%d\n",this);
}
virtual ~C(){
printf("這裡是C的virtual destructor。this=\t%d\n",this);
}
};

int main(int argc, char* argv[])
{
C *c=new C;
printf("c指向C實體﹐它當然該指向C實體的起始處﹕\t\t\t\t%d\n",c);
c->bf("c指向C實體﹐調用從B inheritance的virtual function bf時﹐this=\t");
c->ovf("c指向C實體﹐調用從B overide的virtual function ovf時﹐this=\t");
delete c;
//----------------
printf("\n");
//----------------
B *b=new C;
printf("b指向C實體﹐在剛剛完成構造後﹐它已經向前調整過了嗎﹖﹕\t\t%d\n",b);
b->bf("b指向C實體﹐調用未被C overide的virtual function bf時﹐this=\t");
b->ovf("b指向C實體﹐調用被C overide的virtual function ovf時﹐this=\t");
delete b;
return 0;
}
在我的機器上執行結果如下(//及以後的文字是我後加的)﹕
class A constructor. Addres:7868048
class B constructor. Addres:7868064
class C constructor. Addres:7868048
c指向C實體﹐它當然該指向C實體的起始處﹕ 7868048//當然
c指向C實體﹐調用從B inheritance的virtual function bf時﹐this= 7868064//向前調整
c指向C實體﹐調用從B overide的virtual function ovf時﹐this= 7868048//無須調整
這裡是C的virtual destructor。this= 7868048//無須調整
這裡是B的virtual destructor。this= 7868064//向前調整

class A constructor. Addres:7868048
class B constructor. Addres:7868064
class C constructor. Addres:7868048
b指向C實體﹐在剛剛完成構造後﹐它已經向前調整過了嗎﹖﹕ 7868064//Yes
b指向C實體﹐調用未被C overide的virtual function bf時﹐this= 7868064//無須調整
b指向C實體﹐調用被C overide的virtual function ovf時﹐this= 7868048//向後調整
這裡是C的virtual destructor。this= 7868048//向後調整
這裡是B的virtual destructor。this= 7868064//無須調整
再回頭看看Lippman的示例﹕
Base2 *pbase2=new Derived;
......
delete pbase2;
......
......
(*pbase2->vptr[1])(pbase2);
改變為﹕
(*pbase2->vptr[1].faddr)
(pbase2+pbase2->vptr[1].offset);
我的VC6告訴我說﹐pbase2構造後已指向Derived第二base class Base2﹐要正確調用被Derived override的destructor﹐必須將傳進去的this向後做調整﹕
(*pbase2->vptr[1])(pbase2);
改變為﹕
(*pbase2->vptr[1].faddr)
(pbase2-pbase2->vptr[1].offset);
另一種情況﹐pbase2調用自身聲明、且未被Derived override的virtual function時﹐就無需調整this。如Base2::mumble()(結合P165圖4.2):
(*pbase2->vptr[2])(pbase2);
改變為﹕
(*pbase2->vptr[2].faddr)
(pbase2);
Lippman錯了嗎﹖嗯...咳...這個這個...恐怕還得先徵求一下他的編譯器的意見...我猜想他的編譯器向他彙報工作時﹐他會清松的呷口咖啡﹕“呵呵﹐這個年輕人﹐腦筋真得如此殭化嗎﹖我只是沒交待清楚pbase2->vptr[1].offset中存放的是負值而已。”
是嗎﹖那如何解釋P163 L4的這段示例﹕
例如﹐經由一個Base2指針調用Derived destructor﹐其相關的thunk可能看起來是這個樣子﹕
pbase2_dtor_thunk:
this += sizeof(base1);
Derived::~Derived(this);
難道不應該是這樣嗎﹖﹕
例如﹐經由一個Base2指針調用Derived destructor﹐其相關的thunk可能看起來是這個樣子﹕
pbase2_dtor_thunk:
this -= sizeof(base1);
Derived::~Derived(this);
◆我已感覺到些許的厭煩。

希望侯老師能對我的看法發表點看法。順祝身體健康﹐家人幸福。
吹毛求疵
于2001.7.19

●侯捷回覆:你的工作真是會要我的老命。而 Lippman 卻在美國納涼 :)
就放在這裡,讓大家品鑑吧。anyway,謝謝你。

 

 

 

傳送日期: 2001年7月17日 PM 09:56
閣下好﹐
自從看了閣下的書以後﹐其他的書都有點嚼蠟的感覺﹐讀好書真好。
我買了一本
《深度探索C++對象模型》﹐感覺挺好﹐只是﹐其中不乏錯別字﹐覺得不爽哉﹐特別是封面竟然也有錯誤﹐封面從下往上數第5行﹕ The Semantics of Dsta(一定是Data吧)。
先生的書是貴出名了的﹐我不反對這一點﹐但是﹐能不能在包裝上下點功夫﹐讓人覺得物有所值。

●侯捷回覆:謝謝指正。本書第二刷已更正。


 

傳送日期: 2001年7月17日 PM 08:37
侯先生:您好!
近日拜讀了<
深度探索C++物件模型(簡體版)>,有些問題想和侯先生探討:
1).在P235(第五章最後)Lippman認為 destructor 的執行順序為(具體內容略)1.2.3.4.5;
而J.J.HOU認為執行順序應為2.3.1.4.5,"才符合constructor的相反順序".為了證實,我編了一些tiny program (清單略)在VC6及BCB5中運行.通過assembly代碼分析.發現執行順序確應為1.2.3.4.5.
Lippman沒錯,而J.J.HOU錯了!至於原因,不詳.我猜測這樣是否可以保證destrutor中的user code 能最大限度的正確執行.正如Lippman在P232中說:"你應該拒絕那種被我稱之'對稱策略'的奇怪想法"

2)在P225 L5,"......這並不能省略subobjects的多重拷貝."在VC中是不是這樣的.在VC中
copy assignment operator能保證virtual base calss copy assignment operator只有一個
實體被調用.VC是通過virtual base class table pointer(見P120)來判斷自己是否為most derived class的.正如WWW.JJHOU.COM中所言"不過 VC 做得不錯﹐走得較遠﹐解決了部份問題":)

3)本書雖然質地極佳,但內容稍顯陳舊.特別是第七章,對template,EH,RTTI只是一帶而過.另外,
本書的錯誤極多.J.! J.HOU修正了不少,但仍有漏網之魚.現列舉一二:
A.
P163 L7 'this+=' 應為'this-="
B.
P172 L7 應為:(*ptr->_vptr[index].faddr)
(ptr+ptr->_vptr[index].offset)
C.
P180 L12 "(其中帶有四個members)" 應為:"(其中帶有faddr,delta和vbc_table_slot3個members)" 其中vbc_table_slot為virtual base class table(見P120)中virtual base class 所對應的slot.

OOO
2001.7.17



 

傳送日期: 2001年7月17日 PM 01:38
主旨: Things about <<GP & STL>>, <<TASS>> & Pla01

侯老師﹐您好﹗

GP & STL:

P144, L9 a.front() => a.back() (Very serious error)
P132, L1 Iequality => inequality (Spelling mistake)
P147, L8 X() X a; => X() '\n' X a; (typographical mistake)
P367, L2 reverse_iterator<T> => reverse_iterator<Y>

討論:
P128﹐L5-6:
原文﹕ then the Container's area is bounded above by a constant times the container's size times sizeof(T)
您的翻譯﹕ 則這個Container的area將是某個常數值乘以Container size再乘以Sizeof(T)
我的理解﹕ 依照您的翻譯所言﹐Container的用以記錄其Size等附加信息的member的大小將會隨其Size的大小一同變化﹐如果Size變為原來的兩倍﹐那它們也相應地變為原來的兩倍﹖
您在此處的翻譯出現的最大問題可能在於忽略了“bounded above”這兩個單字上。按照原文的意思﹐Container的area應該是某個值加上(某個常數值乘以Container size再乘以Sizeof(T))﹐用一個數學方程式來表達就是﹕
Area = Const_Info + Const_X * Container_Size * Sizeof(T)
具體的翻譯我一時沒有想出﹐不過您肯定會想出比我好的語句來的:-)

TASS:

另外﹐昨天大概看了您開放的TASS文檔﹐在有一處覺得有點疑惑。您說﹕“GCC是個C/C++編譯器”﹐但從gcc.gnu.org上面摘抄的一段如下﹕

In April 1999, the egcs steering committee was appointed by the FSF as the official GNU maintainer for GCC. At that time GCC was renamed from the "GNU C Compiler" to the "GNU Compiler Collection" and received a new mission statement.

希望老師您能夠把此段作為一個考量。

BTW: TASS是否已經在台灣出版了﹖我想它應該能夠對於我的Pla01的翻譯起到一定的作用吧。只是現在不在□□工作了﹐不知道如何購買之﹐心中鬱悶之情無可發泄﹐惟有盼簡體版早日得見了。

Pla01:

最近在翻譯The C++ Standard Template Libary時﹐總覺得其間錯誤不少﹐然而我卻自今沒有找到其errata。不知老師知道到哪可以找到它﹖如能告知﹐感激不盡。
該書目前已經將近翻譯完第3章﹕iterator(不出意外﹐今天能夠完成),此後也只有<Algorithm>稍難﹐看來我應該是可以做完它了。只是在某些細節處(如原文術語的保留﹐部份語句的用詞等)總覺得不令人滿意﹐因而懇請老師在翻譯的注意事項上面給予我一些幫助。謝謝﹗

●侯捷回覆:感謝指正。皆列入勘誤表。

GP & STL p128,我的譯文的確會引起誤會。仔細體會原文,我認為原文意思也不明確,你給的式子我也不同意。我認為應該是:
Area = X + Container_Size * Sizeof(T) 
這裡的  X 會隨著 Container_Size 而變動,但沒有絕對的比例關係。因此,根據我對STL的認識,我決定把那句話改譯為:

則這個Container的area將是某個數值(Container本身所耗用的額外空間;可能隨container size變動)加上「Container size和Sizeof(T)的乘積」。

TASS 在臺灣還沒出版。我還不打算交稿。

要找 errata,到作者的網站、到 amazon、到出版社網站、或利用搜尋引擎找看看。我沒有你所提的那本書的 errata,我對該書的興趣非常小。

 

 

傳送日期: 2001年7月17日 AM 10:16
侯先生﹕
我在第四章發現了兩個錯誤﹐仿照您的體例我以Lm 表示第 m 行﹐L-n 表示倒數第 n 行。
#P270﹐L11
原文﹕尺寸是由程式員任何指定呢﹖
更正﹕尺寸是由程式員
任意指定呢﹖

#P276﹐L1
原文﹕按下了滑鼠右鍵
更正﹕按下了滑鼠


先生將諸多電子書公之于眾﹐惠澤四方﹐我作為收益者一直為無功受祿而心有不安。偶見《WIN95程式設計指南》尚無勘誤﹐就將隨手記下的幾個印刷錯誤發過去了﹐以為回饋。
君獻美玉﹐我去微瑕。不做無功受祿者﹐一大快事。

●侯捷回覆:感謝。列入勘誤表。

 

 

傳送日期: 2001年7月16日 PM 10:19
主旨: Visual4.0
hello,侯捷大哥.你那本visual4.0看了之後覺得寫的很棒,可是我那是跟人借的
想說自己買一本,可是已經絕版了...真的是好可惜喔...
有沒有那裡可以買到阿....不然妳趕快再出本visual6.0吧...很期待ㄋ..............
加油

 

 

傳送日期: 2001年7月16日 PM 04:57
jjhou﹐您好﹗
首先,感謝您的回復!
明年六年月,我的成人高等教育自學考試就要畢業實踐(我在家買了書,自學,然後參加國家學歷考試,全部課程合格發放國家承認的學歷.), 我會到華中科技大學(它是主考學校)去實踐, 屆時希望能見到您更多的好書, 我也會大力支持您的書籍!!
再次向您的敬業精神表示敬欽佩.
致禮﹗

 

傳送日期: 2001年7月14日 PM 02:46
侯教授﹕您好﹗
我是一名C++語言的初學者﹐今天看到你的網站很高興﹐我就象一頭飢渴的牛闖進了菜園﹐感覺自己的渺小同時也給我的學習帶來了動力和指明了方向。
我從網站上下載了《深入淺出 MFC》2/e ﹐雖然不是簡體版的但是不影響閱讀。
我叫OOOO﹐97年畢業于沈陽工業高等專科學校(現名﹕沈陽大學)的自動控制系。以前在上海打過幾年工﹐由於種種原因現在回到了家裡(湖南耒陽市)。但我一直喜歡計算機的編程﹐在學校也學過基本原理﹐但那時主要是學一些DOS方面的編程。在學習當中還是有很多困難的﹐但我想我會去克服的。
好啦﹐不寫了怕耽誤您太多的時間﹗
一個初學者

 

 

傳送日期: 2001年7月16日 AM 10:43
侯先生﹕您好
《深入淺出MFC》2e 兩處印刷錯誤
P381:“別忘了整個追蹤路線的起源是Scribble Docment;”應為“...Doc
ument”。
P411﹕“凡派生自CCmdTarget
I的類”應為“...CCmdTarget...”。
祝﹕全家幸福

●侯捷回覆:以上皆列入勘誤表。謝謝。

 

傳送日期: 2001年7月16日 AM 09:11
侯老師:
您好!我是您寫的<<深入淺出MFC>>第二版的讀者,我是來自大陸的,現在還在上學.我對於編程有很大的興趣.以前我們上過C語言,學的也比較好.可現在學VC++卻覺的有些困難,特別是有關Window方面的東西.所以我現在有點不知道該如何去更好的學習它.是讀完書再
做實踐呢還是邊實踐邊讀書呢?又應該讀什麼方面的書呢?請侯老師多多指教.謝謝!

 

 

傳送日期: 2001年7月15日 PM 05:14
主旨: 這是bug嗎(C++ primer/3e)?

侯老師您好:
最近正猛K
C++ Primer/3e,著實受益良多,也衷心感謝您用心為大家翻譯了這麼多好書.

以下這段程式碼好像怪怪的,不知是否印錯了?但刊誤表中似乎沒有提及.

p291 L-11 程式碼中: char ch=st[index]
是否應改為 char ch=st.at(index)

ps.我買的是三刷

●侯捷回覆:是的。謝謝你。立刻列入勘誤表。

 

 

傳送日期: 2001年7月15日 AM 10:59
侯捷﹕
你好﹐我是一名學習計算機的學生﹐現在我想在校期間﹐報考程序員考試﹐但是要求必須要會C語言﹐但是我沒有學過﹐我想你給我指導一下學習它的方法。
謝謝﹗

 

 

傳送日期: 2001年7月15日 AM 02:20
候先生﹐您好﹗
我是一個大陸學生﹐是從程序員雜誌上認識了你﹐讀你的文章就如慈父般的教誨﹐令我汗顏﹐真是要謝謝你﹐使我重新認識了編程﹐雖然我現在什麼還不懂。
我想問您一個問題﹐我對編程幾乎是不懂﹐只在學校裡學了一點basic﹐我不知道我刻是學c或c++﹐我知道後者是前者的超集﹐我不知道是否能直接學c++﹐把c++當作一門全新的語言﹐我讀了C++之父寫的相關文章可是不太懂﹐您可否幫我一下﹐如果可以的話﹐我該怎樣學﹐看哪些書呢﹖盼答。

 

 

傳送日期: 2001年7月15日 AM 01:02
侯捷老師﹕
您好﹗能發現你的作品簡直就是福音。尤其我見到了你的站點。
請原諒我說話的語無倫次﹐因為最近經常寫些純個性化的詩樣的東西﹐
話就隨意多了。
我是一直向著程序員這個專業領域邁進的非專業的大學生。關於我的
學習進展實在沒有說的必要﹐自學本身就是挑戰性﹐考驗性的﹐富有
魅力的﹐但這種成功還需要有機遇找到好的指導老師﹐指導教材。幸運
地﹐我找到了你。相信拜訪你的網站﹐研究你的作品﹐能給與我大的裨
益。如果有困難﹐必要地話﹐我會聯繫你。我相信你是一個我心目中希
冀已久的師長。
很高興能知道你也對林語堂大師感興趣﹐我一直沒找到知音。做學問
是我所愛﹐即漫漫求索。能與做學問的老師們交流將是我莫大的榮幸。
我剛剛讀了你的一點東西﹐思緒有些亂﹐但一種衝動讓我伊妹兒你﹐
希望不會影響你此時此刻的好心情。
在一個值得華人慶賀的日子裡﹐我們的咖啡中也增添了一匙糖﹐那是
奧運聖火將在神州大地傳遞的開心自豪的美味﹐可要好好珍惜。
江蘇鎮江


 

 

傳送日期: 2001年7月14日 PM 07:44
尊敬的侯先生﹕
您好﹗
很久以前在網路上拜讀過您關於OO和C++的文章﹐很得教益。後在本地書市購得《深入淺出MFC 第二版》﹐拜讀後獲益良多。今在網站上獲得電子版﹐可謂功德圓滿。謹在此書信致意﹐希望今後先生大作能在大陸廣為傳播﹐推進大陸軟體業發展。
居住省份﹕廣東





傳送日期: 2001年7月14日 PM 03:52
侯老師﹐您好﹗
懇請您開放<<C++ PRIMER>>或<<Essential C++>> 一書電子版!
懇請您開放<<C++ PRIMER>>或<<Essential C++>> 一書電子版!

開放電子書籍﹐您付出很大的心血﹐想必也給您的經濟利益造成一定的損失(另一方面也可能讓人樹立您的一代智儒的形像﹐為大家奉獻了許多精心和心血)﹐但您開放的書籍有四本(基本上都面嚮中高級讀者,對初級讀者沒有照顧到, 當然您沒有這個義務.)

1. 深入淺出 MFC 2/e
2. Win95 系統程式設計大奧秘
3. Win95 系統程式設計 - VM &VxD
4. Win95 程式設計指南

卻沒有<<C++ PRIMER>> 一書開放 ,只有<<Essential C++>>(C++ PRIMER的精簡版)一書由華中科技大學以後出版, 作為我們初學者學習 <<C++ PRIMER>> 卻無法得到.(您的 深入淺出 MFC 2/e同時在華中科技大學出版及網上公佈PDF,可該書實際銷量仍然不錯). 我知道您面對的讀者主要是中高層次的, 可能因此沒有開放<<C++ PRIMER>> , 我想說許多初學者選書很不得當(或翻譯得很爛,或講述不得法),枉費了不少精力, <<C++ PRIMER>>是此入門類之中經典,又出自您的手筆, 可想 懇請 您開放他的電子版,好讓我們貧窮的初學者得以學習經典書籍(因為中高層讀者一般經濟能力都還不錯), 也好為以後的中高級讀者進軍, 這樣您就又可以培養一批忠實的用戶啦!!

不過,<<C++ PRIMER>> 一書是您的心血與結日的翻譯之作, 我尊重您的智慧勞動, 我沒有權利要求您一定要公開, 我只是懇請您為我們初級讀者的儘可能多提供一些精神食糧!! 如蒙您的惠賜開放電子版, 我們將不盡感激之至!! 在此先行謝過啦!!

致禮﹗

●侯捷回覆:我沒有權力開放《C++ Primer 3e 繁體中文版》電子書。因為我不是這本書的作者,我是譯者。

侯捷網站上已經明白告訴各位,只有符合以下情況,我才會開放完整譯作

1. 英文版已絕版
2. 中文版也已絕版,我亦已與出版公司簽訂解約條款。

事實上,就算以上兩點成立,法律上我也不見得有完整的權力開放電子書。之所以願意冒險那麼做,是因為我判斷,在「不妨礙任何人利益」、「侯捷沒有從中牟利」的情況下,大概不會有人找我晦氣,因此我願意承擔,讓大陸讀者多一些接觸經典好書的機會。(這些書都不新,但都是經典,即便現在,也有相當價值 — 前提是你必須有足夠基礎)。

除了三本完整譯作,我也開放了許多局部譯作。我有權力這麼做是因為,書籍的局部開放,對讀者有幫助,對銷售有 promotion 之效,出版社樂見於此。「局部開放」是我和出版社之間的契約。

至於我的著作,當然我有權開放,但難道各位要我把我的每一本書都免費開放下載嗎?一本免費的《深入淺出MFC》還不夠嗎?不要這樣呀!我不想把話說白了。

一旦讀者對於版權觀念有相當程度的自覺,我願意把我的著作全部轉製電子書,以很便宜的價格(紙本書的25%)在網上銷售。目前,電子書滿天飛,盜拷者甚至獲得眾人的掌聲,這種情況下我不可能把我的著作做成電子書。

 

 

傳送日期: 2001年7月14日 PM 01:17
主旨: Maybe one bug in DissectingMFC
hi, sir jjhou
I am a college student in Tongji Uni in Shanghai.
I think your DissectingMFC is the best book I have read.
While I am reading, I find one small bug in your book.
In P.100 (DissectingMFC 2/e SimpleChinese), there is a segment of source code like:
struct CRuntimeClass CObject::classObject =
{ szCObject, sizeof(CObject), 0xffff,
NULL, NULL };
I think there should be
three NULLs in this structure, and I look it up in MFC src( I use VisualStdio6.0). There are three NULLs.

Is it a bug?
I am looking forward to your response.

Tony
PS: Thank you for your great book!!!
(Sorry for my poor English)

●侯捷回覆:是的,應該有三個 NULLs。同時,p106, MFC.CPP #0007 也應該有三個 NULLs。以上皆列入勘誤表。謝謝。

 

 

 

傳送日期: 2001年7月13日 PM 06:09
侯先生﹕
我在您的網站上見到了您和李書良先生的回復﹐李先生願意回答我的問題﹐但沒有留下EMAIL地址﹐可否請您賜告﹖我的作業系統讀繁體中文沒有問題﹐但無法輸入﹐不知李先生閱讀簡體字有沒有困難﹖

另外﹐我今天讀《WIN95程式設計指南》發現三點可能有錯之處﹔

1 P245第2行“不要過掛使用額外位元組”中的“過掛”是“過度”、“過份”、“過多”等之筆誤﹐還是類似“鴨霸”“作秀”、“抓狂”之類具有台灣特色的方言﹖

2 P245倒數第8行“但使用風格位元來構成控制元件的外觀毋寧是比較方便的”中的“毋寧”是否為“無疑”之訛﹖“毋寧”在普通話中屬於書面語﹐完全繼承了其文言文的涵義“不如”﹐查英文詞典﹐解釋為“rather than”﹐意思也差不多。照此解釋﹐整句話變成“但使用風格位元來構成控制元件的外觀不如是比較方便的”﹐句子就不通順了。我不知道“毋寧”是否在台灣還有“無疑”的涵義﹐因為兩岸相隔數十載﹐語言發展不同步是很正常的。

與上面兩點相比﹐650頁出錯的可能性就大多了﹕
P650最後一行﹐None前的指令敘述是空的﹐我認為應當是“.”。P648的最後一行就是“.”﹐書中的許多例子也都是以“.”為分隔符號。比如P297#14、#19﹐舉不勝舉。

BTW﹐“抓狂”到底什麼意思﹖

●侯捷回覆:

1. 是錯別字。其實是「過度」。
2. 我要說的意思是「無疑」。
3. 英文版遺漏了。的確應該加上“.”

以上皆列入勘誤表。謝謝。

BTW: 抓狂就是「快要瘋掉了」的意思。

我欣賞這位先生的理性。兩岸乖隔數十年,文字、文化、思考、生活都有了相當的差異(即便在大陸,東北和西南、東南和西北也有極大的各種差異)。這位先生的措詞是「具有台灣特色的方言」。我在大陸論壇上看到有些人說侯捷的書「滿是粗俗的臺灣土話」

人的說話,表現自己的氣質與涵養。粗鄙的話傷害不了別人,只是反映自己。我對粗鄙的批評,一笑置之。自我設限,最是可憐。金庸小說最感動我的地方是,他點出「不要總是以為漢人是世界的中心」。

無獨有偶,我在臺灣論壇上也看過類似性質的帖文,批評大陸電腦術語譯詞「又低俗又爆笑」。沒有必要如此,兩岸術語不同,只是兩岸各自發展數十年的必然結果罷了。科技術語之翻譯,的確值得好好地、嚴謹地討論,但絕不能一開始就先嘲弄對方,事事物物以自己為中心。大陸慣用的「編程(programming)」一詞,我覺得很好,現在我也都說「編程」。大陸慣用的「面向對象(object oriented)」一詞,我覺得不好(「對象」會和一般生活用語中的「對象」混淆,達不到術語的唯一性和突出性),但為了尊重,我的簡體版書籍也都使用這個詞。臺灣和大陸都慣用的「解析(resolve)」一詞,我覺得不夠好,我覺得我也許可以做點努力,所以我的繁體版都使用「決議」一詞,並要求我的簡體版轉譯者不予更動。

尊重別人,就是尊重自己。尊重別人,才能獲得別人的尊重。

 



 

傳送日期: 2001年7月13日 PM 04:00
侯sir寫的書﹐(完整的)我只看過Dissecting MFC﹐且不仔細﹐不過獲益也非淺。可惜我沒打算把自己捆在VC上﹐只能算“非淺”﹐不能像有些讀者大徹大悟。我更關注侯sir那本解析SGI STL的書﹐看了一部份﹐一定很爽。

侯sir的書大都“深入淺出”﹐不過我想如果能“
深出”就更好。我的意思是﹐站在Pattern之類的角度來看。老是“深入”﹐很容易讓人打瞌睡﹐畏懼感也越強。解析SGI STL那本書﹐很透徹﹐大部份容器、迭代子、算法都講了﹐是否可以在適當的時候跳出來分析一下樣式呢﹖隨便囈語幾句﹐侯sir不要見怪。

當然還有這封信最重要的目的。讀過侯sir的書﹐受了恩惠﹐就算是侯sir的門生了﹐只是不知道侯sir是否願意﹖呵呵﹐主要是拉點關係﹐希望以後能多多指教。

我現在正祈禱侯sir能看到這封email﹐否則上面的話就只有說給自己聽了 ^_^
致禮﹗

●侯捷回覆:「深入淺出」的意思是,把深刻的道理,用淺白的方式說出來。沒有深入探索,就無法理解深刻的道理;沒有良好的理解和文字能力,則無法以淺白的方式表現。

你所謂的「
深出」,我不懂意思。中國文字沒這種用法。

我曾經在論壇上看過一些讀者回應,說《深入淺出MFC》騙人,因為他都看不懂。我想他大概不識中國成語,只看到書名的「淺」字。

自從開始寫譯,這十年來,我的所有工作性質的總結就是:剖析。「剖」是解剖人家的技術(Windows, MFC, C++/OOP/OOD, STL...),析是分析轉化為自己的養份(然後把它表達出來成為別人的養份)。在所有我的作品中,都有分析,有我自己的見解,以及我歸納出來的學習動線。

很多人到現在還不能明白,一本書的好壞,不是(不只是)在於技術上的創新或獨到,而在於能不能在作者的定位下,將解說的對象以清楚的文句、正確的資訊、漂亮的動線串接起來,達到教育的功能。如果我們討論的是學術論文,那麼創新極其重要。而當我們討論的是書籍,即使是電腦書籍,99.999% 的書在技術上是沒有創新的,它們的任務是教育。

然而教育有教育的創新,我指的是學習動線的安排,範例的安排,帶有閱讀樂趣的文字的安排。一本好的技術書籍,從某個角度看,也是一件藝術品,也是一件創作。

你期勉我在 TASS(The Annotated STL Sources)中放進 patterns 的分析,就我對此書的定位來看,是不可承受之重。這本書裡面當然有分析,有來龍去脈的說明,但絕不到《Design Patterns》那般系統化的 patterns 分析工作。那需要另一本三五百頁的書。

更多的 GP/STL 方面的來龍去脈、學理討論、前因後果,會被我放在《泛型技術》書中。

我怎麼敢說你讀過我的書,便是我的門生。聞道有先後,術業有專攻罷了。

傳送日期: 2001年7月14日 AM 12:00
發件人同上

侯sir﹐您好﹗
“深出”一說﹐的確說得不清楚。我的意思是﹐侯sir在TASS的行文之間﹐不妨考慮穿插一些Patterns。比如講迭代子的時候﹐可以將Iterator樣式的相關內容融入到解析的過程之中。這樣在深入解析的同時﹐也可從全局的高度審視。怪我沒說清楚﹐我想侯sir誤會我說在TASS中加兩章Patterns。這就像在Programming Windows 95 with MFC中塞點ActiveX﹐不太好。ActiveX足夠一本書﹐Patterns也足夠一本書。ActiveX不能融入MFC﹐但是Patterns可以融到STL中去。

孔子不過收了三千學生﹐2000年來世人不過祇讀他的書﹐也尊為“萬世師表”。讀侯sir的書﹐又為何不可尊一聲老師呢﹖何況侯sir回復“聞道有先後﹐術業有專攻”﹐嘿嘿﹐這不正是韓愈論述師生關係的嗎﹖

致禮﹗

 

 

 

傳送日期: 2001年7月13日 PM 03:00
侯先生﹐您好﹗
正在拜讀您的譯著《深度探索C++對象模型》﹐看到3.2節Data Member的佈局﹐我對於vc進行了測試﹐
發現vc6對於class中聲明的nonstatic data member﹐無視access section和access level的存在﹐完全按照聲明順序在內存中佈局。這樣豈不是不符合Lippman的講解﹐而且我也不明白vc6這樣處理有什麼優點﹐盼望侯先生能夠回復我的疑問﹗
另外您以前的譯著<<Windows95 system programming secrets>>有沒有重新在大陸出版的可能﹖好像有一本有油墨香的書看﹗而不是電子書。
致禮﹗

●侯捷回覆:《深度探索C++對象模型》簡體版 p92, 3.2 節程式碼下面第一段第一行就說了:
「nonstatic data members 在 class object   中的排列順序將和其被聲明的順序一樣。」
為什麼你說Lippman 的說法和你測試有所不同呢?

請仔細一點,用心一點。

再有,本書開宗明義就說了,不同的編譯器對於 object model 的實現可能有些微不同。 這本書的最大意義不是告訴你你手上的編譯器對於書中所列各主題的精確作法,而是以「某種可能的實現方式」來告訴你,object model 可以這麼實現,從而讓你明白C++ 的幕後機制。本書的最大價值在於讓你對於 vtbl, vptr, object layout, static initialization, ctor/dtor code augment... 成竹在胸,使你對於 C++ 語言有更深層的認識,從而在運用 C++ 語言時知其然也知其所以然,並因而在細微處(例如 efficiency issue)更勝他人一籌。如果你的編譯器的測試結果與本書(Lippman)所言有些微出入,那很正常,因為 不同的編譯器對於 object model 的實現可能有些微不同

這本書很深,因此,出版後,我收到很多讀者來信討論(臺灣、大陸皆如此)。讀者如果看書不夠細心,頻頻來信會帶給我許多困擾。許多讀者把他對某段某行的認知寫出來和我討論,希望得到我說:『是的,你的想法是對的』。很抱歉,這已超越了我對讀者的服務範圍。今後除非明確指出「某處我認為有誤,我認為應該是...」,我將不再回答讀者對此書的探討、申論、疑惑。

你詢問<<Windows95 system programming secrets>>簡體版。不,我沒有這個計劃。這的確是一本很棒的書,它的價值就像《深度探索C++對象模型》一樣,藉由某種實作方式(這裡指的是Windows 95 的核心實作),讓讀者清楚知道 process, thread, task, module, memory management, separate address space...等等 OS issues,使你成竹在胸。你在 OS 這門課程所學到的那些霧裡看花的理論,都將因為實實在在的實作碼(Matt Pietrek 反組譯的結果)而明亮清晰,而楚楚動人。不過,雖然是如此一本好書,我沒有簡體版計劃。因為識貨的人不多,大部份讀者和書店老板,看到 Windows 95 字樣,就逃之夭夭囉。

 

 

 

傳送日期: 2001年7月13日 PM 10:11
jjhou﹐您好﹗
This is a mail from "main land:)",i have download your appriciation Pdf books and i will read and learn,stduy it. Btw,i will buy your paper books,for...you are a best authors i have meet in IT wrriters:).

Thanks again ,not only for your pdf book,but also for your hard work and good essay:).
致禮﹗

 

 

居住省份﹕河北省石家莊市
對侯捷的建議﹕
侯老師﹐請多多注意身體﹐我們需要您這樣的“高階技術導入者”﹐需要文筆流暢、冼練的好老師﹗平時有空要活動﹐哪怕三分鐘﹕)﹐因為我的工作很忙﹐所以特別注意這些。
基本上我瀏覽您的網站有好幾遍﹐感覺受益非淺﹕)﹐ 感覺需要注意的是多一些散文性的文章﹐我感覺看您的文章就是一種享受﹐有時候﹐從您的文章感悟一個道理﹐比調試通過一個程序得到的益處更多﹕)﹐當然java的書再多一些﹕)。
謝謝侯老師辛勤的勞動﹗


●侯捷回覆:謝謝你對我的關心。

 

 

 

傳送日期: 2001年7月13日 AM 10:25
侯先生﹕您好
《深入淺出MFC》2e簡體版﹕P374 “Framework調用CSribbleDoc::Serialize,用以對付文件”應為“...CScribbleDoc::”

上封信剛剛說過要雖然用RAD﹐但隨時準備在主戰場作戰。這星期就已經結束了這家公司的職業。下星期去另一家專門從事視頻多媒體的頂尖企業作軟件開發。清一色VC++。多虧平時有準備。

又買了一冊先生的《深度探索 C++ 物件模型》﹐還沒來得及學習。因為有打工的收入﹐買書手頭闊綽一些。晚上閑來無事﹐看了看寢室裡隨處可見的書。心裡頗有感想。

我買過很多的垃圾書。我的同學就寫過很多的垃圾書(連盜版軟件的解密方法都當作安裝技巧一併寫入並附註冊碼精美圖片)。對現在IT出版界的各種現狀和趨勢有痛恨有無奈有慶幸有期盼。我很喜歡先生的書﹐我沒水平評論您的書代表了多麼先進的技術水平﹐有多少“未公開”的秘笈。但是從書中經常出現的個人心得﹐我知道這是侯捷自己寫的書﹐不是“讀者文摘”類IT書籍﹔從裡面複雜又明瞭的圖解﹐我可以看出作者付出的心血﹔從書中經常的調侃﹐我看出作者樂于與人分享的快樂。

我不知道這些書的水平如何﹖但至少是本負責任的書。

炮製雖繁﹐必不敢省人工﹔品位雖貴﹐必不敢減物力”。這就是我的感覺﹐也與先生共勉。(這句話是同仁堂五代傳人樂梧崗的藥目中所記述的古訓。其實對許多消費者來說﹐同仁堂代表的是質不是量﹐在精而不在速度﹐而各種著名的「丸、散、膏、丹」的「獨特處方」正是同仁堂的對手難望其項背的競爭優勢。侯先生的書﹐至少侯先生對自己的書的期望也應該是這樣的吧)。

下過的功夫必有回報。渡人渡己不談﹐單是將來自己的女兒看到這樣的書﹐熟悉的語氣和工作態度就可以令孩子倍感親切。也平添多少美好的回憶。垃圾書作者想必沒有這樣的快樂吧。

我無力改變紛繁雜亂、熱火朝天的IT出版界。工作更換的間隙﹐發些感嘆。
優秀與否﹐時間將會證明一切﹔
良莠並存﹐時間將會改變一切。
面對ぴ先生的兩本著作﹐心中只祝愿將來的IT書界﹕
跳蚤絕種﹐龍種昇天。
祝﹕全家幸福。


附文:

明師與名師     / 經濟學家 薛兆豐

"明師"有別于"名師"。名師易找,明師難尋。圖書館堙A書籍汗牛充棟,讀幾輩子也讀不完,人生苦短,要提升自己思想的境界,是一定要鎖定幾個明師,下重注來鑽研的。

怎樣把"名而不明"的學者剔除出去,又甚至把"明而不名"的高手識別出來,是很困難的事情。第一個困難,在於受選擇範圍的局限。你的視野以內,可能根本不存在"明師"。這層困難,對中國的讀書人來說,尤其嚴重。絕大部分名著,沒有中譯本;翻譯過來的作品,又受制于譯者的偏好。圖書館的一類書架中,找不到一個"明師"的著作,是並不奇怪的。

三種常見的虛名


第二個困難,是作者的"名氣"會影響讀者的判斷。要增加選中"明師"的機會,而避開"名而不明"之輩,辦法就是識別作者之"名"因何而來。有些人名氣很大,但這些名氣不是來自於學問,而是來自於其他方面。

與學問無關的名氣,最常見的是作者的個人品質,如"動機"、"道德"和"勇氣"。學者們往往喜歡展示一番,標榜自己怎樣憂國憂民,怎樣為民請命,怎樣兩袖清風,怎樣呵護學生,怎樣不為幾斗米折腰,怎樣直言不諱……這些東西可以把少不經世的學生弄得神魂顛倒。可那些品質,統統與學問沒有任何瓜葛。

不是說這些學者一定在吹牛,他們說的可能是真實的,也可能是誇大的,但不管是真是假,他們的個人品質,對於求學的人來說,是一點也不重要的。中國的學生,一向把個人品質看得太重,以致嚴重地干擾了他們對"明師"的選擇。

學者的個人品質,無論是好是壞,都只會波及到他身邊的少數幾個人。如果你要找學者談戀愛結婚、或合夥做生意、或結伴去旅遊,那麼你得關心他的個人品質;但如果你只是要找"明師",那麼就既不要挑剔他個人的壞毛病,也不要為他的人品所迷惑。

第二種與學問無關的名氣,是政府加給他們的。有些學者時來運到,受到政府的賞識,當上了政府的經濟顧問,當上了國際組織的經濟顧問,對經濟政策具有一定的影響力,名氣自然很大,但那也與他的學問無關。政府挑選經濟顧問的時候,是根據自己本來就打算做什麼事情來挑選的,而不是以那個學者本來的學問來挑選的。政府的意圖,又怎能夠作為學術的標準呢?

第三種與學問無關的名氣,來自作者自己的炫耀。有些學者記憶力非凡,什麼書都讀過,讀過的都記得,寫起文章洋洋灑灑,東拉西扯,看上去非常廣博,但廣博不等於思想,聰明也不等於智慧。聰明而沒有智慧,別人就很難向他們學習

時下流行的許多晦澀而空洞的學術文章,是可以靠積累讀書卡片、或利用《牛津引語詞典》之類的工具書、做成電腦資料庫後"自動生成"的。方法是:左一句"哈耶克",右一句"康得",前一句"湯因比",後一句"維特根斯坦",再隨機選用"文明"、"反思"、"自由"、"邏各斯"、"秩序"之類的大詞。

這樣的文章,在國內還有很多人當寶貝來苦讀。原因在於,這些讀者百無聊賴,時間成本很低,而他們崇拜知識,所以一看見自己讀不懂的東西,就覺得理應買下來拜。如果讀書人將來有更多精彩的選擇,時間的成本上升,那麼他們就會從崇拜知識,變成享用知識,有用而看得懂的才買,而充斥"大詞"的空洞文章,就會被淘汰。

靠堆砌別人語錄而成名的"名師",沒有自己的選擇,沒有自己的觀點,沒有自己的品味。我曾經問過一位北京某經濟研究所的學者:"如果你們的研究結論,與其他研究所的研究結論相抵觸,你們怎麼辦?"他輕鬆地說:"沒有關係,學術研究就是這樣,他們有他們的觀點,我們有我們的角度,不會抵觸。"我不客氣地回答:"既然如此,你們還搞研究幹什麼?"

先做明人,始識明師

剔除"名而不明"的老師,辦法是:一不看個人品德,二不看對政策的影響,三不看旁徵博引的本領。那麼,識別真正的"明師",又有什麼辦法呢?辦法似乎只有一個,就是
你自己事前要對具體的問題下過功夫,使自己成為 "明人",這樣才有本事識別"明師"。

現在滿街都是博士教授專家學者,門外漢當然會客觀而客氣地說,張三有張三的理由,李四有李四的看法,誰都未必全對,也未必全錯。泛泛而言,這麼說當然是對的;但一旦遇到了具體的問題,一旦深入到問題的情境,高手和低手的距離,就不可以道里計,就再不是"你也好、他也好"了。

我曾經玩熟了辯證法,能夠用辯證法套用任何事情,所以一讀到波普爾的《什麼是辯證法》,就知道他是天外高手;我又曾經對波普爾的干預主義了如指掌,所以一讀到弗媦w曼的《資本主義與自由》,就知道波普爾在經濟上錯得一塌糊塗;我曾經?薩繆爾森《經濟學》中的"稀缺"、"短缺"、"過剩"概念迷惑不解,所以一讀到阿爾欽幾句乾脆利落的評論,就明白薩繆爾森為什麼戲說他不敢在阿爾欽所在的UCLA教授價格理論;我逐字逐句解讀過阿爾欽,所以能體會張五常的《經濟解釋》在什麼地方技高一籌。

要識別"明師",就要使自己成為"明人"。那麼,到底是先有"明師",還是先做"明人"?答案是:早期的雞生早期的蛋,
某個階段的"明人",能賞識某個階段的"明師"

●侯捷回覆:

這是我第一次接觸薛兆豐先生的這篇文章。文章寫得很好,我想應該廣為流傳了吧。

在這裡我也寫一點我的看法。

薛先生所談的明師,專指學問而言,因此他說『可那些品質,統統與學問沒有任何瓜葛』。但若論及「傳道,授業,解惑」,在傳道這個層次上,老師的人品就相當重要。如果有幸得遇人品學問俱佳的明師,對我們的一輩子影響深遠。就算學問普通(囿於天賦)而人品高尚,我也認為是明師 — 甚至在我的價值觀裡,那是更重要的人生明師。

薛文通篇談到「作者」一詞,顯然此文是針對「書籍作者」而發的議論。一個書籍作者能夠透過文字讓讀者感受(並接受)其人品,那是太困難了。所以我上面的說法有點「陳義過高」。

再談「作者之名因何而來」。除了薛文所提三點,第四種是「讀者大眾加諸的名」。不同的讀者,因為不同的啟發,對作者發出了不同的評論。這應該是比較客觀的,可資參考的,但也可能和薛文所提三點混在一起。世上本來沒有一樣東西是完全獨立發展的。

感謝讀者寄給我這篇好文章。

PS : 對我而言,辯證法,波普爾,《什麼是辯證法》,干預主義,弗媦w曼,《資本主義與自由》,薩繆爾森,《經濟學》,"稀缺"、"短缺"、"過剩",阿爾欽,價格理論,張五常,《經濟解釋》,也都是一些大詞呢。 :)  

心情偶得:世事皆兩面,靜觀終自得。

 

 

傳送日期: 2001年7月12日 PM 08:27
今天我剛買了你的一本《深入淺出MFC》﹐看了前面的讀者的反映﹐已經是激動不已。原來你是這方面的泰斗﹐真是有眼不識泰山。現在我已經認准了你的金字招牌了﹐你跑不了了。我看書上寫的作者是候俊杰﹐怎麼上了你的網站變成候捷了﹐原來是同一個人。我還跟同學說﹐台灣有兩個人很猛﹐一個是候俊杰﹐另一個是候捷。現在你害得我出洋相了。雖然買了你的書﹐但還是下載了《深入淺出MFC》。
姓名﹕OOO(記住我了﹐可能以後比你還強的電腦專家)
現職﹕學生
畢業學校科系﹕計算機系
年齡﹕22
性別﹕男
居住省份(台灣讀者請寫縣市)﹕廣東汕尾市
對侯捷的建議﹕再接再厲﹐出好書。



 


傳送日期: 2001年7月12日 PM 05:30
> 現職:高雄榮總 放射線部 醫師
> 畢業學校科系:陽明大學醫學系
> 居住省份(臺灣讀者請寫縣市):高雄市
> 對侯捷的建議:
> 1.感謝侯捷先生願意將書本電子化 下載只是方便查閱 書籍 我依舊會買
> 2.不曉得侯捷先生是否有意出版Java相關的書籍?

●侯捷回覆:印象中至少有三位醫師因為注意我的文章(或書籍)而寫信給我。醫師的忙碌與壓力我是知道的,不知這幾位醫師朋友看這些電腦技術專業文章或書籍做什麼? 不可能想改行吧!

2001 新書計劃 中有Java相關書籍

 

 

 

傳送日期: 2001年7月12日 PM 04:56
站點有很多值錢的東東﹐網站能做的更專業一點就更好了﹐至少網頁要精緻一些﹗
About Me: 1999 畢業 武漢華中理工大學 計算機專業 北京 男 軟件開發

 

 

傳送日期: 2001年7月12日 PM 03:56
侯捷先生﹐您好﹗
我是一名C++初學者(非科班生)﹐才看完一本相關的C++入門書籍(《C/C++ how to program》)﹐對C++語法大概有一些了解。我知道我現在不應該過早的接觸MFC﹐但是當我看了您的《深入淺出MFC》第一章和第二章後被它深深的吸引住了(簡直是無法自拔)。這真是一本難得的好書。但是﹐我還是有一個疑問﹐我現在是不是應該進入MFC的學習。( 《深入淺出MFC》第一章看得似懂非懂也就是說看得懂但是自己做不出來﹐第二章倒是完全沒問題。)侯捷先生能不能給我一點建議我應該怎樣學習。大陸關於C/C++的好書太少﹗我是應該先學學數據結構還是可以直接開始MFC的學習呢﹖
致禮﹗


●侯捷回覆:我收到太多太多太多……詢問學習步驟的問題。而我總是回答:請看侯捷網站上的文章。

看來這樣的回應效果不彰。我決定寫一篇相關文章投於《程序員》雜誌上,白紙黑字,效果可能比較好。今晚開始寫,如果07/15 前完成,或可趕上八月份《程序員》。

這裡先簡單回覆你。「我現在是不是應該進入MFC的學習」,唔,應不應該我不知道,但「可以進入MFC的學習」。SDK(Win32 APIs)的基礎愈多,再輔以《深入淺出MFC》這種探究MFC framework 的書,便能快速掌握根本結構、知道來龍去脈、知道 How 也知道 Why。所謂「快速」,要看你的 C++ 和 SDK(Win32 APIs)的基礎有多好。

「我是應該先學學數據結構還是可以直接開始MFC的學習呢﹖」兩者沒有衝突。你愛先學誰就先學誰,看你把目標放在哪裡。

 

 

 

傳送日期: 2001年7月12日 PM 12:43
侯老師﹕您好﹗
這向在讀您翻譯的《深度探索C++對象模型》一書。感覺該書將我平時未曾細想的幕後的東西都一一展現出來了﹐看到了自己以前對C++認識的太膚淺﹐有時都覺得以前對自己認識膚淺的不自知是多麼的危險和恐怖。幸好在讀了您的第一本書《深入淺出MFC 2e》後﹐認識到買書更多的是要看作者的名字﹐因此當時儘管有人說這本書太偏太晦澀﹐在看到您的大名後我還是毫不猶豫的掏了銀子。因為這樣的書值得﹗

在讀了前面一部份後﹐有些地方還有點迷惑﹐希望侯老師再度點撥一下。
-------------------------------------------------------------------
1)
P5﹕“每一個non-inline member funciton只會誕生一個函數實體。至於每一個擁有零個或一個定義的inline function則會在其每一個使用者(模塊)身上產生一個函數實體。”
這是不是說﹐inline member function 也跟數據成員一樣﹐在每個對象中均保留有其代碼﹖
如果是的話﹐那麼P27頁中講“需要多少內存才能夠表現一個class object﹖”時是否也應該將inline member function 也包括進來﹖如果不是的話﹐那麼“inline function則會在其每一個使用者(模塊)身上產生一個函數實體。”是指什麼意思呢﹖

2)
P20﹕“&memble.pc”是否為“&mumble.pc”印刷之誤﹖

3)
P25﹕“自我類型”是指“private”嗎﹖

4)
P40﹕“對於class X﹐如果沒有任何 user_declared constructor﹐那麼會有一個default constructor被暗中 (implicitly)聲明出來……﹐一個被暗中聲明出來的 default constructor將是一個trivial constructor……”

而P47又總結說﹕
“implicit trivial default constructors﹐它們實際上並不會被合成出來”
那麼對於一個沒有任何 user_declared constructor的class﹐究竟有沒有一個trivial default constructor被implicitly聲明出來呢﹖

我相信“實際上並不會被合成出來”﹐所謂“實際”是指向該class中擴張出 default constructor的代碼。因為編譯器認為該constructor是trivial的就不會實際來合成它。編譯器只會實際合成必需的nontrivial default constructor。

因此﹐ P40 C++ Standard[ISO-C++95]的Section 12.1的說法就不太對了。而P39的C++(ARM)[ELLIS 90]中的Section 12.1的說法(“在需要的時候被編譯器產生出來”)還更正確些。

我這樣的理解對嗎﹖

5)
P98﹕“一個指向data member的指針﹐用以指出class的第一個member 和 一個
指向data member 的指針﹐沒有指出任何member”中的第二個"data member"是否為"data members"印刷之誤?

P130﹕“然而你若去取data members的地址”是否應為“data member”呢﹖

以上是我自己看書時的一些理解和猜測﹐無論正誤都請侯老師指出來﹐讓我心裡塌實一點。為早日進入“自渡”境界增添點信心。

最後祝侯老師身體健康心情愉快﹗

●侯捷回覆:

1) P5﹕“每一個non-inline member funciton只會誕生一個函數實體。至於每一個擁有零個或一個定義的inline function則會在其每一個使用者(模塊)身上產生一個函數實體。”
這是不是說﹐inline member function 也跟數據成員一樣﹐在每個對象中均保留有其代碼﹖

侯捷回覆:不是。

如果是的話﹐那麼P27頁中講“需要多少內存才能夠表現一個class object﹖”時是否也應該將inline member function 也包括進來﹖如果不是的話﹐那麼“inline function則會在其每一個使用者(模塊)身上產生一個函數實體。”是指什麼意思呢﹖

侯捷回覆:意思是在每一個「 inline 函式被調用」之處,編譯器都把「整段 inline 函式定義」安插進去(導致程式碼膨脹)。

2) P20﹕“&memble.pc”是否為“&mumble.pc”印刷之誤﹖

侯捷回覆:是的,謝謝。將列於簡版勘誤表。

3) P25﹕“自我類型”是指“private”嗎﹖

侯捷回覆:不是。原文為 px, for example, may address either an object of its own type or a type publicly derived from it。唔,書上我的譯文不理想。根據技術上的意義,重譯為:舉個例子,px 可以指向某個型別(type),也可以指向「根據 public 繼承關係而衍生」的一個子型別。

4) P40﹕“對於class X﹐如果沒有任何 user_declared constructor﹐那麼會有一個default constructor被暗中 (implicitly)聲明出來……﹐一個被暗中聲明出來的 default constructor將是一個trivial constructor……”

而P47又總結說﹕“implicit trivial default constructors﹐它們實際上並不會被合成出來”
那麼對於一個沒有任何 user_declared constructor的class﹐究竟有沒有一個trivial default constructor被implicitly聲明出來呢﹖

我相信“實際上並不會被合成出來”﹐所謂“實際”是指向該class中擴張出 default constructor的代碼。因為編譯器認為該constructor是trivial的就不會實際來合成它。編譯器只會實際合成必需的nontrivial default constructor。

因此﹐ P40 C++ Standard[ISO-C++95]的Section 12.1的說法就不太對了。而P39的C++(ARM)[ELLIS 90]中的Section 12.1的說法(“在需要的時候被編譯器產生出來”)還更正確些。

我這樣的理解對嗎﹖

侯捷回覆:不同的書在談到這個主題時,說法不一。其實無關緊要。編譯器到底會不會為 class 合成出一個 trivial default ctor, 視你從哪一個角度去看待所謂 trivial function。如果合成一個空的ctor,那便表示 object's data members 的初值將會是記憶體配置時的 random bits(也就是無特定初值可言)。那麼,這樣一個空空如也的 ctor,從邏輯上你可以說它存在,從實務上你可以說它不存在(想必被優化掉了,或真的根本不曾出現)。

5) P98﹕“一個指向data member的指針﹐用以指出class的第一個member”和 “一個
指向data member 的指針﹐沒有指出任何member”中的第二個"data member"是否為"data members"印刷之誤?

侯捷回覆:完整的說法是你所寫的那樣。但有時候簡略地寫,也沒錯。英文版便是簡略地那麼寫。

P130﹕“然而你若去取data members的地址”是否應為“data member”呢﹖

侯捷回覆:這在這裡是一樣的。

以上是我自己看書時的一些理解和猜測﹐無論正誤都請侯老師指出來﹐讓我心裡塌實一點。為早日進入“自渡”境界增添點信心。

最後祝侯老師身體健康心情愉快﹗




傳送日期: 2001年7月12日 PM 01:41
侯教授﹕您好﹗
初次見面打擾了﹗
我是C++的初學者﹐今天到書店看到了您篇寫的《MFC初入淺出》第二版。感覺很好﹐只是這本書主要是面對VC++5.0的﹐我安裝的是VC++6.0。害怕買來以後學起來很費勁。想請教您是否已經出版了第三版或相關的書。還有我聽別人說《Win95程序設計》(Charles Petzold編寫的)這本書也是很好的﹐被稱為程序員的‘聖經’。可是這兩本書都是大塊頭書﹐要是都買的話﹐好像沒有這麼多的時間和精力來學。您幫我選擇好嗎﹖我以前學過《C/C++程序員實用大全----C/C++最佳編程指南》(Kris Jamsa,Lars Klande篇寫的)。這本書沒有講訴MFC以及編譯調試有關方面的知識。
如果能為我解答這個問題﹐我不勝感激﹗
急盼您的答復﹗謝謝了﹗
一個C++的初學者

●侯捷回覆:目前完全沒有打算寫《深入淺出MFC》第三版。講解底層機制的書,不太隨著版本而變。我已經久不碰 platform-specific 的東西了。.NET 正式出來時,我會看看MFC有怎樣的演化。如果變化小,我不打算寫新版。如果變化大,而我還有興趣和時間,我會寫第三版。無論如何,不短的期間內不會有第三版。

 


 

傳送日期: 2001年7月12日 PM 01:45
侯先生﹕
很喜歡您的《深入淺出MFC》﹐覺得現在計算機圖書雖然多﹐但真正用心去寫的﹐卻沒有幾個。我有些疑問﹐希望您能給我一個答案﹐
總是聽很多人說﹐程序員到30以後﹐就走下坡路了﹐那時也編不出什麼好程式了﹐而應該是向系統分析員這樣的類型去轉變。我不知道這樣的說法是不是正確﹐我才出來工作兩年﹐還有幾年就也差不多30了﹐我覺得那是編程經驗最豐富的時候﹐難道不能寫出最優秀的代碼﹖還有﹐如果要做一個系統分析員﹐那麼有什麼要求呢﹐我們在平時的工作和學習中應該注意什麼呢﹖
第一次給您寫信﹐心裡抱ぴ試試的態度吧﹐因為看了您的書﹐心裡的印象就是那種良師益友﹐呵呵﹐感謝您在百忙中閱讀我的郵件﹐謝謝﹐盼往您的回音。


●侯捷回覆:各行各業都存在著初階、中階、高階。

要先定義清楚「程序員」三個字。如果程序員單指「每天寫碼,事必躬親」這個層級,這是初階。30 歲應該還可以,38 歲還要記住數以萬計的程式碼,就累了。如果程序員泛指「吃軟件開發這行飯」的,做到 60 歲沒問題。隨著你的經驗累積,你會開始指導新人、規劃軟體架構、開規格、定驗收標準;然後你開始對市場敏感,對景氣敏感,開始負責案子,負責一堆人的生計。這是經驗累積之後的個人價值所在。

三廚只夠資格切菜洗菜,二廚可以掌杓拿瓢,控制火候。大廚動動嘴,點撥點撥,開採買單,光鮮亮麗地問客人『今天菜色合您胃口嗎?』。他們都是廚師,他們的層級不同,收入不同,地位不同。

有人想一輩子做二廚嗎?

若有人以為大廚只動口不動手,有什麼了不起。哼哼,沒水準。大廚如果不曾經是個優秀的二廚,他能點撥幾句,切中要害嗎?

 



傳送日期: 2001年4月11日 PM 07:54
侯先生: 您好!
這些日子以來,每天一有空就抱著 "深入淺出MFC 2/e",每天都有聞道的快樂.
書買回來很久了,供奉在書架上唬人,朋友們來到舍下,莫不投以敬畏的眼光.
平日以Delphi或Intouch等圖控軟體謀生, 累積了一些經驗,有一天偶然拿起書架上這本以前看不懂的巨著,暮然發現九陽真經原來就在我家.
還沒讀完,但忍不住要讓您知道我歡喜讚嘆之情!


●侯捷回覆:很開心聽到你「每天都有聞道的快樂」。

 

 

傳送日期: 2001年7月11日 PM 01:27
侯先生﹕
今天檢查郵件﹐很高興收到您的回信。
合譯或監製方式的弊病引起了您的“警惕”(很高興不是許多大人物所言的“關注”)﹐我相信您接下來與人合譯的新書錯誤當大大減少。
高興之余﹐我在
《WIN95程式設計指南》第4章又找到了一個bug。239頁第一段第3行
“全部都在
一個位址空間中執行”當為“全部都在一個位址空間中執行”之訛。
中國人以不指斥他人之非為美德﹐但我堅信﹐只有發現錯誤者敢於提出﹐出現錯誤者敢於承認﹐中國才有希望進步﹐否則﹐一切擲地有聲的豪言壯語都是空話。在您身上﹐我見到了勇于承認錯誤的美德﹐我也將繼續把發現的錯誤提出來。

BTW﹐CSDN上列出的郵購書價實在令我膽寒。我心儀已久的C++ PRIMER中文版連運費大概要370人民幣﹐是我1/3的薪水﹐看來短期內我是難以拜讀大作了。千萬忠魂﹐同聲一哭﹗


●侯捷回覆:感謝您再次指正。立即列入勘誤表中。

書籍內容,黑為黑,白為白。有錯就改,是每一位作者都應該做,也做得到,也歡喜做的事。沒什麼特別。

CSDN 提供海外購書服務,價格所反應的是「出版當地」的物價水平。


傳送日期: 2001年7月11日 AM 09:49
居住省份(台灣讀者請寫縣市)﹕重慶市
對侯捷的建議﹕從讀者的角度﹐我們希望你多出好書﹔從個人的角度﹐希望你保重身體。(當然﹐身體好才能多出好書﹐對嗎﹖ ﹕) )


●侯捷回覆:對 :)



傳送日期: 2001年7月10日 PM 11:32
侯老師﹕
你好﹗能夠買到你的書﹐真的非常高興﹐今天看到《深度探索C++物件模型》(簡版)第64頁﹐發現此處好像印刷有錯﹐不知道是不是﹐請執教。
深度探索C++物件模型(簡版)第64頁﹐第18行的﹕
__result.X::X
X( xx );
好像應該為﹕__result.X::X( xx );

謝謝﹗另外﹐你的書籍大陸現在就只有《深入淺出 MFC 2/e》跟《深度探索C++物件模型》﹐不知道你的其他書籍什麼時候大陸才能出版﹐另外《多型與虛擬》跟《泛型程式設計與 STL》我非常想看﹐不過不知道要等到什麼時候啦 :)


●侯捷回覆:謝謝指正。

書籍出版時程,請見 2001 大陸出版計劃



傳送日期: 2001年7月10日 PM 07:12
侯老師﹐您好﹗
居住省份(台灣讀者請寫縣市)﹕深圳
對侯捷的建議﹕
首先謝謝您給我們帶來一本好書﹐感謝和讚揚的話大家說太多了﹐我就不重複了﹐我是武大的﹐記得吧﹐我爸也是武大老師﹐說這些只是想轉入正體﹐恕我直言﹐當知道您在“報效”tw時﹐心裡很不舒服﹐為什麼非要出去呢﹖(現在還沒統一)作為一個程序員老是用它國的東西總時不舒服﹐為什麼我們不行呢﹖為什麼可以的人偏要出去呢﹖我們需要像您這樣的老師來指引我們干點事情。可就連下載的電子書也是繁體的﹐唉...。
雖然...我還是很敬重您﹗


●侯捷回覆:第一遍沒看懂。第二遍大概懂,第三篇真正懂。

我生於臺灣長於臺灣。我的父母生於臺灣長於臺灣,我的祖父母生於臺灣長於臺灣。我的曾祖父從福建泉州渡海而來。 01/06 歸鄉寫作

年輕人,聽我一句勸。不要存地域之私。我愛臺灣,也愛大陸。我愛所有平和講理的人。你不抬頭,看不到青朗廣闊的天空。

通常我一回完信件就把來信刪除(信件內容已拷貝置於網站上,而我也只在網站上回信)。除非讀者來函有很強烈的特徵,而後續來函又提到(或顯示)了那個特徵,否則,我無力也無心記住任何特定的 email address 或 name。你說「我是武大的﹐記得吧﹐我爸也是武大老師」,唔,完全記不得。



傳送日期: 2001年7月10日 PM 04:27
侯老師﹐您好﹗
我在csdn和您的網頁看到過這樣的信息說2001年5月C++之父的《C++程序設計語言》第三版
在我國發行﹐由徐寶國譯。我一直都在等這本書﹐可是到現在都7月中旬了﹐還沒有見書的影子。我想問一下這書到底什麼時候出來﹐我非常想讀這本書。麻煩您幫我了解一下情況。
謝謝﹗

我花一個多月一口氣讀玩《深入淺出MFC》和《深度探索C++物件模型》深深的感到您的書寫的好和妙。我以前的許多的問題﹐在您的書找到了答案。我現在就等著您將要出版的伍本簡體
1、多型與虛擬 2、泛型技術 3、STL源碼剖析 4、The C++ Standar Library
5、win32多線程程序設計

您辛苦了﹗
謝謝﹗﹗﹗


●侯捷回覆:我想你肯定是在 CSDN 上看到的訊息,非出自侯捷網站。我對此訊息一無所悉。大陸出版訊息,我無從得知;他人的出版訊息,我亦鮮少提及(恐他人有商業機密等等考量)。只有好朋友的出書計劃,在自揣對彼有 promotion 價值的情況下,才偶而隱喻一點點。

你所等待的那些書,不會讓你失望 :)

 

 



傳送日期: 2001年7月10日 PM 03:13
主旨: 讀【讀者來函】有感

敬愛的 侯大哥您好

每次欣賞「讀者來函整理」,心中都有很大的震撼與感動,
但礙於文思不敏,每當內心澎湃洶湧,總是 key不出幾個字。
現在藉由您的讀者來函,附加我的感想寄出給您的第一封 mail。
以下雖然文字是抄襲,但要表達的心聲是自己。

毫無疑問C++是值得一學的。但要寫出真正像樣的程式來,工夫尚在語言之外。
要學習的東西實在太多了!

想一步登天,三個月拿下MFC然後寫出“大”程式的人,實在太過天真。

自從看了侯sir 的書和文章之後,
我感到自已在技術上的進步有限,但在心態和學習方法上卻有很大的改變。
真的踏實多了,也不再心浮氣燥。
而且也知道到哪裡找資料學習,閱讀原文資料時,也能一步一腳印緩緩行進。

發現當自己肯放慢腳步,逐字劃線、查字典、做筆記時,
原本一個個零散的單字能一串串吸收,之前做的筆記領著我,將文章一段段的掃過,
有時得克制些興奮的心情,停一下將讀過的部分留下註腳,方便日後查閱。
說真的,讀書的樂趣就從此開始了。

這一切與技術無關,但又大大相關的進步,都是由「侯捷網站」而起。
因進步得到自信心的增強,使我對這句「勿在浮砂築高臺」侯sir 的耳提面命,
有更進一步的體認。

借用您一位讀者的比喻:
在侯sir 的溫暖小港停靠後,我也划著自己的小船,往「資訊汪洋」前進。

原以為您是領著大夥航行的船長,漸漸了解這是一處小港,
人人可在此打造自己的小艇,在資訊的大海堭u徉。

再次謝謝您
死忠的讀者 敬上


●侯捷回覆:「 原以為您是領著大夥航行的船長,漸漸了解這是一處小港,人人可在此打造自己的小艇,在資訊的大海堭u徉。」你寫出這樣的話,我很開心,真的很開心。迷時師度,悟了自度。

 

 

傳送日期: 2001年7月10日 AM 10:18
山高月小﹐水落石出。
謝謝你的書!
u002p-sgys.gif (33466 bytes)


●侯捷回覆:豐子愷的畫呀。收到這麼好的禮物,真開心。謝謝你。

 

 

 

傳送日期: 2001年7月10日 AM 10:31
侯先生:
呵呵,首先向您問個好!
我是東北沈陽的一個讀者,近來讀了您的一些作品,深表敬佩。

《WINDOWS95程式設計指南》我下載后斷斷續續讀了前三章,發現了一些錯誤,現臚列于下。
(1)55頁圖1.3下方的說明文字,"起使視窗" 應為 "起始視窗"之訛;
(2)67頁第五段第二行,"于是我們可以只畫矩行" 應為 "于是我們可以只畫矩形" 之訛;
(3)146頁程式列表3.5 resource.h這個檔案完完全全驢唇不對馬嘴,与前面的DlgXpnd.rc毫無關系。我想它的內容應該是:
(侯捷註,此略)

(4)149頁表3.2第二行DlgMdlls.c應為MdllsDlg.c(見156頁)之訛;
(5)166頁表3.4第二行DlgDlg.c應為DynDlg.c(見176頁)之訛;
(6)233頁程式列表3.22 resource.h這個檔案与程式列表3.21 DlgSize.RC竟然完全相同!本身的內容哪里去了?

侯先生在《侯俊傑 序》中曾言到:"此譯本中的每一個句子,都經過我的檢驗与修潤,如果書中仍有誤謬,一切責任應歸于我。"我對侯先生治學的嚴謹是相信的,相信您對譯本中的每一個句子都嚴格檢驗過了,但原始碼是不是就馬馬虎虎過去了?
我沒有見過此書的原著和原始碼,不知道錯誤(3)-(6)是繼承自原著,抑或出自于出版商?無論原因何在,這些錯誤都會給讀者帶給不便。而要避免這類錯誤,只要任何一道關口的任何一個人多一份認真就足夠了!
侯先生帶給大家的這本好書我一定會讀完、讀懂、讀透,希望下面的章節沒有這類錯誤。

現在,我想請教侯先生175頁的一個問題。這段原始碼是一個hook function,我的工作環境是WIN98(Version2)+VC6
(侯捷註,此略)

我沒有解決舊問題,又帶來了新問題,百思不得其解之下,只好求助于您了。
祝多出好書,青春永駐!

●侯捷回覆:

非常感覺這位讀者的熱心指正與批評。如您所言:「相信您對譯本中的每一個句子都嚴格檢驗過了,但原始碼是不是就馬馬虎虎過去了?」的確,對於合譯或總監方式的書,我總天真地以為原始碼只是依樣拷貝,初譯者只要細心一點,理不應有誤,所以我對於程式碼幾乎沒有什麼檢查。身為本書總監,所有責任在我,我感到非常愧赧。

合譯或總監方式的書,出現這樣的錯誤,我已經有了警惕。以後對於程式碼的部份,會更加嚴格要求,並親自檢驗。

我不知道,在臺灣,其他人出書,有沒有關卡。就我而言,唯一的關卡就是我(這或許是過去以來累積的信譽,獲得出版社的完全信任)。想到唯一關卡在自己,實在令我臨淵履薄,汗如雨下。錯別字的影響還算不大,源碼內容的誤植可就太不妙。面對您這樣的讀者,我非常非常感激。

您所提的六點,我已全部納入本書勘誤表(隨信附上),即日刊於侯捷網站。

至於您提的問題,很抱歉,我並不對讀者提供技術服務。如果讀者發問恰是我很熟的東西(不需再花時間去找資料、回憶),我順手也就回答了。您提的是hook 問題,很深,而我也久沒碰 Windows platform-specific 的東西了,所以,抱歉。(當然,如果是我的「著作」,您問我為什麼這麼寫那麼寫,翻箱倒櫃我也得回答您)

您對問題的描述很清楚,我大略看了一下,第一,本書第6章專講hooks,也許對您有幫助。第二,hook 的運用,必須遵循一定的「公約」。檢驗回傳值,就是一種「公約」。它肯定是有作用的,您仔細看看第六章,以及 MSDN 中對於 SetWindowsHookEx 和 CallNextHookEx 的解釋,應能釋疑。祝順利。

BTW,以後寫信給我,請直接使用 plain-text,不要使用 word doc file。那會使我轉檔不全,又恐其中有毒。很可能我會把這樣的信直接刪除,根本不看。

再次感謝您。

●李書良回覆:

您好:首先感謝您的細心指正;我是此書的譯者李書良,關於您所提出的這些錯誤實屬我個人
的疏失,侯老師之所以放心,是對學生的信任,學生未及,深感慚愧,在此對您致歉。
但如您對Hook Application有任何的興趣,或許我們可以一起討論。侯老師對書籍嚴謹、認真的態度,我想眾所皆知,我不多言,值得您細細琢磨。

謹覆
李書良 (Shu-Liang, Lee)/ 2001.07.10

 

 


傳送日期: 2001年7月9日 PM 08:52
請問"演講授課活動"網頁中:

2001/07/19 始 思源 授課 C++/OOP 基礎訓練並帶高階概念
18小時 每週四 18:30~20:30 每週六 13:30~17:30

1.該如何報名?
2.學費?
3.上課地點?

●侯捷回覆:這是思源公司的內訓,不對外公開。sorry

 

 

 

傳送日期: 2001年7月10日 PM 04:31
侯先生﹐您好﹗
我不是程序員﹐但是想往這方面發展。我以前用asp寫網頁﹐現在用pb做mis﹐還做過圖形圖像設計等許多亂七八糟的東東。我是從一個程序員朋友那裡看到你的書的。他們都說好﹐是經典﹐學習必備。我覺得我以後也肯定會學習c/c++﹐所以先找本經典的留著。呵呵。

我的資料﹕
居住省份(台灣讀者請寫縣市)﹕天津市
對侯捷的建議﹕多寫書﹐我很喜歡你的文筆。



 

傳送日期: 2001年7月9日 PM 03:00
侯先生:
你好!
最早是在<<程序員>>雜誌的書評欄目中知道的你,後來又知道你的<<深入淺出MFC>>.

讀你的書,感到比別人的書要艱澀一點,但細細品味,就會發現其中所隱藏的韻味來,自己是半路出家的計算機迷,深感基礎知識對自己的限制,而自己又非意志堅強直至的人,所以在學習VC的路上,坎坷頗多.直到讀了你的大作才使自己有破雲見日的感覺,雖然我現在還是存在好多的疑惑不解,但我已經看到了希望的曙光!
   再次致謝!


 

 

傳送日期: 2001年7月9日 AM 09:50
對於“深度探索C++對象模型”的一點看法

侯先生﹕你好﹗
在華中科技大學出版社出版的這本書裡﹐我看到你在 133 頁的譯注﹐我想提出我的一點看法﹐供侯先生參考。

“但為什麼(4)也是0”﹐
我認為可能是編譯器的一個bug﹐理由如下﹕
1.若在Derived裡定義一成員 int valD, 則其offset值為8.
2.我用一個系統的宏offsetof(offsetof(s,m)定義在STDDEF.H裡)計算類內的偏移﹐得到值為4。

這個bug的來源可能是
編譯器將多重繼承與多重虛擬繼承(public virtual base class)在偏移計算上沒有很好地分開所致。另offsetof宏不能用于多重虛擬繼承﹐否則會拋出異常(exception)
值得提醒的是,
VC++對於多重虛擬繼承使用的是虛基類表(virtual base class table)的方法﹐無論有幾個虛基類(virtual base class),在派生類(derived class)裡只有一個指向虛基類表的指針。在這種情況下﹐“所以(4)也是0”。
請侯先生指教﹐附程序。

struct Base1 { int val11; int val12; };
struct Base2 { int val21; int val22; };
struct Base3 { int val31; int val32; };
// struct Derived : public virtual Base1, public virtual Base2, public virtual Base3 { int valD1; };
struct Derived :
public Base1, public Base2, public Base3 { int valD1; };

#define offsetof1(s,m) ( (size_t)&(((s *)1)->m) -1 )
//原系統宏為 #define offsetof(s,m) (size_t)&(((s *)0)->m)

void CTestApp::Test()
{
CString s, s1;

s.Format("&Base1::val11 = %p \n", &Base1::val11);
s1.Format("&Base1::val12 = %p \n", &Base1::val12); s += s1;
s1.Format("&Base2::val21 = %p \n", &Base2::val21); s += s1;
s1.Format("&Base2::val22 = %p \n", &Base2::val22); s += s1;
s1.Format("&Base3::val31 = %p \n", &Base3::val31); s += s1;
s1.Format("&Base3::val32 = %p \n", &Base3::val32); s += s1;
s1.Format("&Derived::val11 = %p \n", &Derived::val11); s += s1;
s1.Format("&Derived::val12 = %p \n", &Derived::val12); s += s1;
s1.Format("&Derived::val21 = %p \n", &Derived::val21); s += s1;
s1.Format("&Derived::val22 = %p \n", &Derived::val22); s += s1;
s1.Format("&Derived::val31 = %p \n", &Derived::val31); s += s1;
s1.Format("&Derived::val32 = %p \n", &Derived::val32); s += s1;
s1.Format("&Derived::valD1 = %p \n\n", &Derived::valD1); s += s1;
TRACE(s);

s.Format("&Base1::val11 = %d \n", offsetof1(Base1,val11));
s1.Format("&Base1::vall2 = %d \n", offsetof1(Base1,val12)); s += s1;
s1.Format("&Base2::val21 = %d \n", offsetof1(Base2,val21)); s += s1;
s1.Format("&Base2::val22 = %d \n", offsetof1(Base2,val22)); s += s1;
s1.Format("&Base3::val31 = %d \n", offsetof1(Base3,val31)); s += s1;
s1.Format("&Base3::val32 = %d \n", offsetof1(Base3,val32)); s += s1;
s1.Format("&Derived::val11 = %d \n", offsetof1(Derived,val11)); s += s1;
s1.Format("&Derived::val12 = %d \n", offsetof1(Derived,val12)); s += s1;
s1.Format("&Derived::val21 = %d \n", offsetof1(Derived,val21)); s += s1;
s1.Format("&Derived::val22 = %d \n", offsetof1(Derived,val22)); s += s1;
s1.Format("&Derived::val31 = %d \n", offsetof1(Derived,val31)); s += s1;
s1.Format("&Derived::val32 = %d \n", offsetof1(Derived,val32)); s += s1;
s1.Format("&Derived::valD1 = %d \n", offsetof1(Derived,valD1)); s += s1;
TRACE(s);
}

●侯捷回覆:感謝,我將細細品味。

 

傳送日期: 2001年7月9日 AM 10:21
侯先生﹕您好。
看了您的回覆﹐很開心。
也看到了如下的來信﹕
“ 書謅得滿好的﹐內容少了點﹐廢話多了點﹐自己狂妄自大多了點﹐視別人為白痴多了點
不值那麼多錢  簡直是個垃圾”

給禮拜一本來很好的心情抹上一層陰影。
《紅樓夢》也是“儒者見仁﹐道者見道﹐淫者見淫”。但是起碼的禮貌要有吧。
即使是聖水﹐撒在糞土上﹐濺起的也是糞水。
(侯先生如果覺得文字過份﹐可以不予刊出)。

祝﹕心情愉快
全家幸福


●侯捷回覆:你說的真好。但我們不必為寫出那種話的人操心太多。林肯說,人到了40歲便需為自己的臉孔負責。侯捷說,人一到18歲便需為自己的文字負責。文字與說話都反映一個人的水平。

書籍絕對可以批評,也需要批評。最受歡迎的是「技術上的對與錯」和「文字上的對與錯」。這是一種黑白分明的指正,作者一定要(並且會)開心接受,有責任感的作者還會提供勘誤表。

另一種批評,指向書籍定位,這個爭議較大。比如我說某書適合初學者,你卻認為太深了,我說某書立論深遠,你又認為太淺了。這就沒個準。有些讀者對於深淺的認定標準是:沒有學過的就深,豎大姆指,已經會了的就淺,豎中指。「專業書評」和「讀者看法」之不同,就在於立論是否有據,立論者是否立於制高點。

至於看不懂就說爛,不符己意就說遜,那不值得回應。粗俗漫罵者又更等而下之,徒留笑柄。

侯捷的書籍常在各種技術論壇上被討論,這是一個作者(或譯者)的榮幸。論壇上什麼樣的立論態度和立論水平都有,我也常常從中得到反省(包括正面教材和負面教材)。只要信寫到我這兒,在不傷對方隱私的前提下,目前我的態度是儘量整理刊出(除非單純表達感謝而無其他措詞)。對我而言,這些來函是侯捷人生的某種記錄,也許喚起回憶,也許引發欣慰,也許輕輕一笑。忠實的記錄,不能經過挑選。

 

 

傳送日期: 2001年7月9日 AM 04:48
畢業學校科系﹕上海交通大學計算機系
居住省份(台灣讀者請寫縣市)﹕上海
對侯捷的建議﹕很想拜讀您所有大作﹐但由於起步晚加上地域問題﹐實難如願﹐如果可以提供更多電子版以供下載﹐萬分感謝。


●侯捷回覆:

百思不解。你下載了《深入淺出MFC》,卻又寫信問我其他更多電子書。不就都在侯捷網站上嗎?就算你在其他網站下載,你也做點功課嘛 :)

 

 

傳送日期: 2001年7月8日 PM 07:36
尊敬的候老師﹐您好﹗
我是您的一位大陸讀者:
居住省份(台灣讀者請寫縣市)﹕河南
對侯捷的建議﹕可以把專業性很強的書寫得讓人讀起來是如此的美味,您是我自懂事以來遇到的第一位. 對你的崇敬之意無詞可容. 非常感激您!
祝:身體健康!
萬事順心!


●侯捷回覆:有時候我感到困惑。雖然我行文順暢,筆調(略顯)輕鬆,但理當不到各位給我的巨大讚美。熱情的讀者把巨大的熱愛,投射在我身上,給我過多的讚譽,真使我不知怎麼回應才好。「行文順暢,用詞精準」這樣的評語,竊認當之無愧,其他都是謬譽。謝謝你們的錯愛。

 

 

 

傳送日期: 2001年7月8日 AM 06:24
侯捷,您好!
我想與您討論多形與虛擬一書,我發覺我從後面看(四、五章)比較懂;第二章就進行多形的底層,我覺得太快些,應讓讀者嘗嘗甜頭再剖析其底層機制,可能是比較好的方式。

●侯捷回覆:感謝您。我會納入考量。

 

 

傳送日期: 2001年7月10日 AM 08:41
侯先生:
我是您在大陸的一名讀者,知道下面的圖書在大陸無法購買。前幾天我認識一位臺灣朋友,我想委託他在臺灣購買,不知下面的圖書是否可以買到?在那堨i以全部買到?

您說過,您一般不回復郵件,可是我很著急,好容易抓住一個機會能買到書,請您回復好嗎?

C++ Primer 中文版》、《 C++ Primer (3/e) 題解》、《泛型程式設計與 STL》、《COM本質論》、《More Effective C++ 中文版》、《Exceptional C++ 中文版》
請您務必幫助,只因您的書太好了!

●侯捷回覆:台北火車站附近的重慶南路的天瓏書店,或鄰近的其他電腦書店,可以買到你所列的每一本書籍。如果你的朋友不住台北,那麼,找當地最大的電腦書籍,應該也都會有(或至少有其中數本)。

 

 

 

傳送日期: 2001年7月8日 AM 02:03
侯先生﹕
您好。我是您的一位大陸讀者﹐也是崇拜者。由《程序員》雜誌認識了您﹐可以說是相見恨晚﹐雖然我們不能見面。由您介紹的好書﹐我受益非淺。在此深深致謝。今天我在您的網站上下載了《深入淺出MFC》一書﹐再次謝過。我的資料如下﹕
居住省份﹕四川
能遇見您是我們的幸事﹐希望以後能看到您更多的好書﹗

 

 

傳送日期: 2001年7月6日 PM 11:51
候捷老師﹕
你好﹗
我是一名大連某大學的學生﹐今年大二﹐計算機專業。我的大學很一般﹐甚至可以說差﹐學校的對外交流很少﹐我的計算機知識大部份是自學的﹐學校的不能滿足我的需求。我對計算機很痴迷。但有個問題讓我很苦惱﹐我的學習完全是我通過各種渠道獲得的信息總結後﹐自己找的方法﹐很缺乏系統的指導﹐可以說是事倍功半﹐很盲目。我很想在軟件方面發展﹐但對該學習什麼很茫然﹐對
該看什麼書﹐該獲取哪些信息沒有數。我看了你的無責任書評後﹐燃起了很大的學習熱情﹐很想獲得你的著作﹐可大陸買不到你的書籍﹐很ぴ急。但我還是繼續了我的學習﹐但我希望我能受到你的指導﹐這對我很重要。因為﹐計算機是我一生最大的愛好﹐最大的興趣所在﹐高考時﹐我的志願表報的全是計算機專業﹐如果我報其他專業的話﹐我可以上名牌大學﹐但因為我對計算機的執卓﹐所以我上了一所沒什麼名氣的大學。所以﹐侯老師﹐請你幫助我﹗謝謝﹗

●侯捷回覆:軟體技術很博大。如果單指 programming技術(我是指不涉及Domain Knowledge),絕對可以自修有成。侯捷網站上有許多學習方面的文章,這是我能給你(以及所有寫信給我的人)的所有幫助。

 

 

傳送日期: 2001年7月6日 PM 09:49
居住省份(台灣讀者請寫縣市)﹕廣州市
對您的建議﹕好像找不出什麼建議﹐我學計算機5年了﹐看過的書不計其數﹐可
以說﹐您的書是最出色的。我大學期間曾經看過MFC的書籍﹐但是
那些垃圾讓我很快就轉學了DELPHI(當時課程設計任務緊)。在此
感謝您的辛勤勞動﹐也希望能更快地看到您的新書。



傳送日期: 2001年7月6日 PM 08:58
侯先生﹐您好﹗
看了您的大做(深入淺出 MFC第2版),真是相見恨晚,這裡表示真心的謝意!祝您健康!
我是在您的網站上下載的電子書,這裡有個不情之請,您是否可以給我一份源程序代碼同可執行文件!
在從多電腦書籍中,您的書是一股清流,對我來說,您的書是一個燈塔,為我指明指明瞭一個方向.
希望能拜讀您更多大做,尊重您的勞動,可是您的書對我來說實在是很不好買到,
希望您能放更多的電子版.讓更多的人先睹為快!
最後再次祝您健康!


●侯捷回覆:該書程序代碼早已在侯捷網站上開放。

 


傳送日期: 2001年7月6日 PM 04:48
侯先生﹕
您好﹗
我是一個很想學編程的人﹐但苦于這方面的書籍太多﹐我不知從哪下手﹐期盼您的幫助。
給我介紹一些由淺入深學習編程的書籍好嗎﹖例如﹕先看《xx》再看《xxx》。vc++方面的。


●侯捷回覆:侯捷網站上有許多相關文章。

 



傳送日期: 2001年7月6日 PM 01:41
主旨: 謝謝您提供深入淺出MFC電子書
居住省份(臺灣讀者請寫縣市):新竹縣
對侯捷的建議:
我個人並非資訊相關科系畢業的,有關程式設計部份大多從書本中學來的,所以其實我對程式設計感覺有一點茫然,不知道自己所學的方向是否正確,而自己寫程式的方式是否恰當,能否請侯捷給我們這些半路出師的人一點建議及指教呢?

●侯捷回覆:侯捷網站上有許多這類文章。

 

 

傳送日期: 2001年7月6日 AM 06:34
侯先生﹕您好﹗
以前拜讀過您的大作《深入淺出MFC》﹐收益多多﹗
今日訪問您的網站﹐看到您更多的作品﹗其中由您翻譯的《Win32 多緒程式設計》(Multithreading Applications in Win32)一書﹐我以前在網上看過介紹文章---是一部非常不錯的書﹗非常想看到這本書﹐但在大陸好像還沒有發行。所以冒昧地向您請求﹐能否email給我一分此書的電子文檔(英文版本也可以)﹖




傳送日期: 2001年7月6日 AM 01:47
您好﹐侯先生﹗
我是一名您的讀者﹐您的<<深入淺出MFC>>使我受益非淺。真是很感謝您。
另外我想問您一下關於Microsoft的.NET platform and C#,好像炒的很熱。不知是個什麼東西﹖能否大概給介紹一下或推薦一些相關的資料。
謝謝﹗
祝您身體健康﹗萬事如意﹗

 

 

傳送日期: 2001年7月5日 PM 09:51
敬愛的侯捷老師﹕
今天有幸能夠下載您的電子圖書﹐心中很是高興。希望能夠在您的圖書的指導下﹐自己的計算機水平有一個提高﹐我也相信在您精心編著的圖書的指導下一定可以的﹗

本人只是一個普通的計算機編程愛好者﹐今年17歲在上海就讀高中﹐馬上就昇高三了。以後有意從事IT事業﹐深知如果要使中國的軟件業有一個本質的提高﹐必須從小打下良好的基礎﹐並且要有一個完整而健全的軟件發展體制。而如今﹐看到的是許多從事軟件事業的人們缺乏職業精神﹐心中很有想法。我想這方面印度比我們做的好得多﹐儘管我們好像有許多程序員還看不起印度的程序員﹐但是我認為要想發展中國的軟件事業﹐必須抱ぴ一種平等的心態﹐不能夠對那個民族報有偏見。況且﹐印度是現在世界上公認的軟件強國﹐也是公認的軟件業唯一有可能在二十一世紀趕超美國的國家﹐因此﹐我們就更加應該吸取他們成功的經驗來發展我們本國的軟件事業﹐您說我說對嗎﹖

您作為一個中國軟件業資深的人士﹐深深為您能夠將自己經驗奉獻出來感到振奮、欣慰和感激。我希望您今後能夠多出好書﹐我也希望能夠讀更多的您寫的書。不過﹐也提一個建議﹐我知道一本書的價格體現出一本書的價值﹐對於您的書價格偏貴一點也是應該的。但是由於我們處在學生時代﹐經濟能力有限﹐在大陸聽說您的圖書在書店要買到80幾元﹐這對我們來說不是一個小數目﹐對於迫切想讀您寫的書的我們更是一種打擊。不知您今後能否在出版圖書的時候適當壓低價格﹐使更多的讀者能夠接觸的您寫的經典著作呢﹖謝謝

祝身體健康﹐事業再創輝煌﹗

 

傳送日期: 2001年7月5日 AM 11:38
侯老師﹕
您好﹗
今天在CSDN上看到他們即將推出海外圖書(繁體版﹐英文版)郵購服務﹐其中有一項﹕“你對我們這項業務的建議”﹐我寫了一大堆﹐這裡也給侯老師看一下﹐看侯老師是否願意把我這想法跟CSDN的蔣濤站長提提。
---------------------------------------------------
書都是好書﹐我都想買﹗有人願意提供這樣的服務已經是很感謝了﹗但價格超過我的購買力太多了(不想惹我十分尊敬的侯老師生氣﹐只怨自己購買力太低﹐:))。

上次看到CSDN上有電子書付費調查﹐我很高興﹐且十分願意付費。如果我買電子書是否應該便宜一點(至少運費就可省了:))。我還是個學生﹐一個月的生活費也就300RMB﹐只夠一本C++ Primer。要是300RMB能讓我買﹕C++ Primer及題解﹐泛型程式設計與STL﹐COM本質論﹐Exceptional C++共五本書﹐那我一個月不吃飯也願意。只是提出這樣的要求﹐連我自己都覺得過份了(五本書不算運費已經就900RMB了)﹐唉:(﹐祇想早點賺錢看到好書想買就買﹗

CSDN願意提供電子書購買服務嗎﹖我願意付費﹐也會尊重作者勞動﹐不去四處散播。這裡我提供一個思路﹐供你們參考﹕可以為每個付費購買電子書的讀者設定一個唯一的號碼﹐每個購買、電子書的讀者必須簽訂一份協議並交納一定數目的押金﹐保證不去複製和傳播所購得的電子書﹐否則一旦發現其有違背協議的行為﹐以後將取消其購書資格並沒收其押金﹐同時在CSDN上公佈其不守信用的德行。
-----------------------------------------------------------------
另外﹐現在我正在讀侯老師的《深度探索C++對象模型》﹐那種感覺就象讀《老子》一樣﹕比較深奧難懂﹐但懂了的部份竟是那麼的妙不可言﹗順便說一下﹐華中科技大學原校長中科院院士楊叔子先生說﹐每個西方人都要讀一本書《聖經》﹐每個信伊斯蘭教的人都要讀一本書《古蘭經》﹐而每個中國人也應該讀幾本書《老子》和《論語》。楊先生還要求華中科技大學的博士生如果背不了《老子》和《論語》就不准答辯。

最後﹐等我把《深度探索C++對象模型》讀完後﹐有些地方再跟侯老師討教﹐我覺得有些地方在表述上還可以更好一些(如assign大陸這邊一般譯為“賦值”)﹐就象書中侯老師加進來的那些插圖﹐對讀者的幫助和體貼真是讓人心懷敬意又感激不盡﹗

祝侯老師和師母身體健康心情愉快﹗


●侯捷回覆:CSDN 的海外書籍郵購服務,是提供讀者另一個買書管道這些書籍直接從海外進口,書價反應的是「出版當地」的物價水平。對大陸讀者而言,這些書價當然是非常高的。我看到有些帖文把抱怨指向CSDN,甚至指向書籍作者或譯者(目前全都是侯捷),那真是完完全全地「搞不清楚狀況」。當然,對於這樣沒有邏輯的帖文,沒有回應的必要。

關於電子書,是非常好的想法。電子書可以以非常便宜(紙本書 1/3~1/5)的價格銷售。讀者看了之後,覺得值得購買紙本,可以再去買一本;經濟能力稍差的人,至少也得到了一本完整的書(只是讀起來可能不那麼舒服)。說起來是「多方贏」的局面。然而,為數不少的缺乏智財權觀念的人,破壞了美好的氣氛,買一份電子書,呼朋引伴地吆喝,還主動貼帖文要寄給大家,享受眾人在網上的幾句虛幻的感謝,並美其名為社會主義與共產主義的實現。

電子書的密碼起不了作用,密碼可以滿天飛舞。鎖定機器也許有用(技術上也做得到,臺灣已有這方面的廠商),但卻造成讀者的不方便。我個人很不喜歡玩「我防你,你防我,官兵抓強盜」的遊戲,覺得缺少一種真誠在其中。所以,在沒有看到一定程度的讀者自覺(自覺「支援索費電子書,是對自己有利」,自覺「譴責盜拷盜傳電子書,是對自己有利」)之前,我沒有意願把自己的作品做成索費性電子書。

你所列的作法,忽略了「電子書的第一存在價值在於方便」。王安石的青苗法,立意雖佳,滯礙難行 :)。至於你說「侯老師是否願意把我這想法跟CSDN的蔣濤站長提提」,唔,你的意見和我的回應,放在這兒,蔣濤先生一定會看到的。

人類的進化,先求生存,再及廉恥。西人在智財權上的堅持與實踐,不是因為他們的人性比我們高明,是因為他們的生活普遍優渥,沒有心理不平衡的問題,因而比較起來普遍願意尊敬別人因努力與正直而獲得的財富、地位、名聲。

說到「心理不平衡」,我看 CSDN上頭一些帖文,對於社會(更明確地說是程序領域)名人的詆譭、人身攻擊、低下言論,在在令人心寒與膽寒。我最害怕那種視別人皆「偽君子」而自許為「真小人」者,別人的道學都是「假道學」,自己的低俗則是「真性情」。這樣的人真的很讓人「敬」— 敬而遠之。

當然,理性的人往往沉默(我願意這麼認為),這是希望之所繫。

經濟一直是中國的問題。關於「學會尊敬別人因努力與正直而獲得的地位、財富、名聲」的課題,其中有現實與基本人性的因素在,不只是教育的課題,也不是幾句教條就能奏功。

CSDN 進行電子書付費意願的調查時,把我的名字列了上去。雖然這是他們的美意,但是,實在說,目前為止,我沒有意願製作索費電子書。要嘛,我就做免費電子書,免費給大家看(侯捷網站上有完整電子書數本,局部電子書數本,都免費)。在大環境還沒有進步之前,我不想製作索費電子書來讓自己面對一些光怪陸離的現象生悶氣。



傳送日期: 2001年7月4日 PM 03:22
侯先生您好。在您的《深度探索C++對象模型》一書中﹐第133頁譯注您寫道﹕
“……經過Visual C++ 5.0編譯後﹐執行結果竟然都是0……為什麼(4)也是0﹐
而不是4﹖是否編譯器已經內部處理過了呢﹖……”
我用VC6.0編譯了這一組程序﹐當然也得到了與您相同的結果。但是﹐當我把
程序改成如下的樣子時﹕
printf("&pB1->Val1 = %p\n", &pB1->Val1);
printf("&pB2->Val2 = %p\n", &pB2->Val2);
printf("&pD->Val1 = %p\n", &pD->Val1);
printf("&pD->Val2 = %p\n", &pD->Val2);
printf("&pD->vald = %p\n", &pD->vald);
這幾行代碼的輸出結果如下﹕
&pB1->Val1 = 00780EC0
&pB2->Val2 = 00780E90
&pD->Val1 = 00780E50
&pD->Val2 = 00780E54
&pD->vald = 00780E58
這也就證明﹐Derived的對象結構的確與我們預期的相同。
另外﹐我也用BCB5編譯了這一組程序﹐得到的結果如下﹕
&pB1->Val1 = 00663DE0
&pB2->Val2 = 00663DF0
&pD->Val1 = 00663E00
&pD->Val2 = 00663E04
&pD->vald = 00663E08
應該說這個結果與VC得到的結果是一樣的。
我想編譯器的確做了一些處理﹐但不是在類結構上﹐而是在printf上。至於具
體的處理方法﹐我想不明白﹐不知道您是否了解﹖
以上是我的主觀推測﹐請您指教。叨擾之處﹐請您多包涵。


●侯捷回覆:感謝,我將細細品味。不過我認為編譯器對此的處理絕不會在 printf() 上。
base class, derived class, multiple inheritance...這些主題和 printf() 相距太遙遠啦。

 

 

傳送日期: 2001年7月4日 PM 01:33
居住省份(臺灣讀者請寫縣市):台北市
對侯捷的建議:其實我最喜歡的還是侯 sir 您的第一本著作, "虛擬記憶體 - 觀念設計與實作", 利用 irq 存取記憶體的技巧倒還是還是其次, 最重要的是, 讓那時候的我見識到了何為"有系統"的程式庫的長相
打氣加油不差我一個, 但還是說聲加油

 

傳送日期: 2001年7月4日 AM 10:41
侯先生﹕你好﹗
在虛擬函數的表格結構中﹐對於其它函數很好理解﹐但是關於虛擬destructor﹐如果基類有虛擬destructor﹐例如﹕按照表格結構﹐佔用例如索引1﹐但是派生類也有虛擬destructor﹐那麼它也佔用1位置﹐且覆蓋掉基類的destructor位置﹐這是編譯器做的動作﹐因為一般函數只有重新寫才會覆蓋啊﹖
請賜教﹗

 

傳送日期: 2001年7月4日 AM 09:20
侯先生﹐您好﹗
在譯作Inside C++ Object Model 第2章 "Copy Constructor的建構操作"中"重新設定Virtual Table的指針"一節(簡體版P54--57)裡詳細討論了當Class聲明瞭virtual function時﹐編譯器在合成copy constructor時要將vptr適當的初始化﹐但是沒有提到對Class的member編譯器在合成copy constructor時是如何初始化。另外也沒有提到自己定義的copy constructor對member是如何初始化的

我猜想是不是這樣子的﹕
如果member是object﹕
如果該object是展現bitwise copy semantics的﹐則合成的copy constructor將對它進行bitwise Copy﹔
否則合成的copy constructor將調用它的copy constructor
如果member是非object﹐如int﹐char等﹐則編譯器會對其 bitwise copy(正如P53偏上的合成copy constructor的例子).

還有一個問題﹕
在P58中偏上的一段話 "如果一個Raccoon object作為另一個Raccoon object 的初值﹐那麼 bitwise copy就綽綽有餘了" ,是不是應該加上前提條件﹕Raccoon class 及其base class既沒有聲明copy constructor﹐也沒有聲明一個或多個virtual function ?

再一個問題﹕
如果有member是pointer的﹐如char *str﹐則用copy constructor為object賦值時﹐被賦值的object的該 member也指向同一處內存﹐不會出現問題嗎﹖

 

 

傳送日期: 2001年7月4日 AM 09:19
侯先生﹕您好
看您的書有了點心得。大陸的軟件工程師對Client/Server模式的網絡數據庫程序一般比較熟。我也是。而我在開始學習Document/View時總是有點迷惑﹐為什麼引入這種模式?
後來﹐心裡突然想到﹐這是不是微縮到一個程序內的Client/Server. C/S模式講究為了服務多個Client﹐並達到數據同步﹐將數據處理的操作全部(或儘可能)放在Server一端﹔而Client一端則只負責界面、數據的接受、顯示和檢驗輸入有效性。很像Document/View模式﹐一體多面﹐並且同步。這樣比較後﹐覺得有點大徹大悟﹐而且後面的知識有點勢如破竹。不知道我這樣的比較有沒有道理﹖這樣的思考方法有沒有意義﹖如果有道理﹐您可以在三版的時候提一下﹐幫助作了很多C/S的人們理解。

另外﹐我雖然在上學﹐讀碩士﹐但是很早就在軟件公司打工了。每天從學校坐車到高新區(高新科技園區﹐台灣的科學園一般﹐也可理解為高薪區:-))。雖然工作中用Delphi,也覺得很好﹐但是從某種意義上﹐RAD有點像施振榮說的“利基市場”﹐他主張在用利基快速滿足現在的需求時﹐要隨時準備在主流市場上作戰。因此每天回校和在車上就在讀您的《深入淺出MFC》(呵呵﹐從C/S想到Document/View,從企管想到技術學習)。無奈本人擁有暈車的愛好。車上一讀書﹐尤其愛好。因此發明一讀書法給同好參考﹕翻到最不理解的幾頁﹐看幾行﹐眼望窗外﹐思索﹐周爾復始。反正侯Sir說了﹐“OO需要一些靜思”。至今此法屢試不爽。

侯先生您說向這樣在車上讀書﹐會令作者感動的流淚。我不期待您的淚了﹐期待感動侯嫂多批准你每天一杯的咖啡算了。
因為﹐贈人咖啡之手﹐歷久猶有餘香。^@^
祝﹕全家幸福。

 

傳送日期: 2001年7月4日 AM 08:46
侯老師你好﹐
我是大陸北京一普通程序員﹐最近一直用VC++編程﹐以前看到的VC的好書都是老外寫的﹐國內的書很多多是翻譯MSDN的爛貨。 真沒想到台灣出如此好書﹐也非常遺憾95年出的書﹐我在2001年才看到。不知是什麼原因﹖
希望您能多出好書﹐真的非常感謝您。

 

傳送日期: 2001年7月3日 PM 06:13
侯先生﹕
你好﹗
在你的《深度探索C++對象模型》的147頁上﹐對於magnitude()你認為可以直接進行Point3d::magnitude()﹐但是上面說明它是virtual function﹐如果這樣豈不是失去virtual機製﹐而(*this->vptr[2])(this)﹐則可以保持virtual機製。不知我的理解對否﹖
望能賜教﹗


傳送日期: 2001年7月3日 PM 04:58
何時能出簡體版啊?
今年年底可以嗎?
熱切盼望!!!

 

傳送日期: 2001年7月3日 PM 04:00
jjhou﹐您好﹗
知道你翻譯過很多大作﹐但是沒有inside windows 2000 和 programming windows driver model這兩本﹐大陸方面已經有了這兩本書的印影版﹐不過都是e文的。給中國的程序員(對e文不是很精通的)帶來了很大的麻煩﹐非常希望你能夠翻譯這兩本書。有很多底層的程序員在期待ぴ這兩本的中文版﹗


 

傳送日期: 2001年7月3日 PM 02:57
> jjhou﹐您好﹗
> 我是一名軟件工程師 ,最近我公司出品了一個軟件。因為要保護知識產權﹐這就涉及到一個加密的問題。初步我們決定取cpu 的信息。或別的硬件信息。主要是想要得到每臺機的唯一特征
> 信息。以產生一個對每臺機器有唯一授權的序列號﹗但我對取硬件信息(如 cpu )一不了解。
> 我用vc﹐請賜教如何取得cpu的信息﹐或任何能唯一標識一臺機器的硬件信息。
> 謝謝﹗
> 致禮﹗

●侯捷回覆:取得 CPU 序號,是鎖定機器的一個好方法。取得辦法既不困難,亦非機密。我在臺灣BBS論壇上看過討論。但是我沒有記下來。請到論壇上發問,或看精華區文章。

 

 

傳送日期: 2001年7月3日 AM 10:57
主旨: maybe it is a error!
Hi,Mr Hou:
In page 65 with your book "Inside The C++ Object Model",there exists a clause expressing with "X __temp0; (bar(__temp0),__temp0).memfunc()",maybe error?what does this mean?

 


傳送日期: 2001年7月3日 AM 10:46
候先生﹕您好。
我看《深入淺出MFC》2e簡體版﹐發現了一點小失誤﹐不是您的錯。
P326頁﹐“前一頁的CFrameWnd::LoadFrame程序”簡體版應為“本頁的...”。
另外﹕P301 第一行 “CThread::OnIdle”是否應為“CWinThread::OnIdle”﹖
謝謝。
p.s.
想出了一個酷招﹐以後你在大作的最後一頁標上一句酷詞:"I'll be back". What's cool!

●侯捷回覆:是的,應為 CWinThread::OnIdle。謝謝指正。我將刊於網站勘誤欄中。

 

 

傳送日期: 2001年7月3日 AM 09:23

Hi~ Hou Sir:

我是□□,最近可好? 想必正忙著寫作出版的事情吧

看到網站上更新了許多內容,也看見你今年預定出書的計劃,希望可以很快見到他們出版。

最近觀察到一些有趣的事情,提出了跟侯大哥分享。

1.

雖然現在用Java的人越來越多,但是在Real-Time System, Embedding System, 或是一些需要與硬體溝通,講求效率的系統中,仍然以C++為主;由於現有的大型系統/程式庫仍是以c或c++撰寫,可以想像在未來幾年內仍需要以C++加以維護擴充,所以看到有人說C++會被Java取代,不禁〔冷笑〕兩聲

例如前兩週我到矽谷一家VoIP的公司面試,他們要求的是C++程式的開發能力,而不需要Java程式設計。有趣的是其中面試的人考了我一些C++技巧上的問題,例如如何限制產生物件的個數等等。這些問題我雖沒有實際處理過,但在你的譯作中有提到,因此面試過程還算蠻順利。

2.

之前USC/ISD有一個研究助理的工作公開徵人,內容是負責撰寫network protocols, and network/transport layer programs. 需要的技能則是C++與Perl。基本上絕大部分的工作,如果是商業網站設計,或是網路應用軟體,會要求應徵者會Java; 其他絕大多數仍然是以C/C++為主,甚至在UNIX系統的範圍內,還會要求你要熟悉Perl.

從這兩個例子看來,美國的軟體設計開發仍以C/C++為工業界普遍認定的標準。不僅是因為現有的系統是利用這些開發的, 更重要的是C/C++能夠解決絕大部分的問題,甚至可以以物件導向的特性, 讓開發者能利用OOA/OOD在系統設計之初便能獲得益處。 相對來說也表示Java在出盡鋒頭的幾年之後,也必須慢慢證實自己的身價,讓大家相信他能夠提供有效率的執行碼,能建構robust system, 能提供各種模式解決不同的使用者需求等等,這樣才能有繼續生存下去的價值。

對我來說,應該還是會以C/C++為主要的工具,因為目前我進行的計劃都是比較低階,核心的程式設計。例如UNIX socket programming就得用C/C++撰寫。我不擔心會跟不上Java的風潮,畢竟程式設計法門各有巧妙,但卻都殊途同歸。況且Java與C++還有一定程度的血緣關係,要轉換想必不會是難事。

看見侯大哥有新的譯作,如exceptional C++, 也有預計出版新的著作,心裡總是很期待能有機會看看。在美國買這類的書當然比台灣方便,我的英文程度也還能讀懂這些書籍。但能用自己最熟悉的語言,去讀這些被細心翻譯的書籍,感覺總是不同的。我也曾經在洛杉磯這帶的台灣書店尋找過,可惜他們都只進Office or Windows 的使用手冊。請問侯大哥,在美國是否有地方能找到你出的新書呢? 或者我可以委託台灣哪家書店代定呢? 讀侯大哥寫的書對於我來說,是一種享受,所以即使有了英文版本,仍會想看看你的中文版要如何呈現書中的各種觀念.

零零碎碎地寫了一些心裡一直寫到的事情,希望侯大哥不會覺得無聊 :P

最後就祝福侯大哥寫作生涯順利, 能達到自己訂定的工作目標

●侯捷回覆:一個優秀語言,從誕生到被市場廣泛接受,其間需要(我認為)大約十年功夫。主要因為,使用者的慣性沒那麼容易更改。其他語言所保有的各種資源,也是一個新生兒必須花不少時間去超越的。Java 很優秀,然而 C++ 更已經成熟到標準化了。這是它們之間一個不小的距離。

美國買得到侯捷的書嗎?我不知道。就算有,購買點恐怕非常非常少。至於自臺灣郵購,請洽出版社(侯捷網站上列有各書的出版社名稱)。郵費可能比書價還貴喔。

你說「我的英文程度也還能讀懂這些書籍。但能用自己最熟悉的語言,去讀這些被細心翻譯的書籍,感覺總是不同的」,這種情況我也感受深刻。拿最近的例子,我正在細讀葉秉哲先生翻譯的Design Patterns。閱讀這些被我們所信賴的譯者細心翻譯出來的書籍,在技術領略上,在閱讀速度上,在閱讀印象上,都比直接閱讀英文書深刻。(當然啦,由於我自己是技術寫譯者,我有自己的主觀,因此另準備了原文書在旁伺候。遇有疑惑就看看原文書怎麼說,用哪個詞,進而可能在中譯本上塗塗改改。)這些書都是朋友好意贈送,但我仍然要說,如果書好,譯者值得信賴,讓我花兩份錢(一買原文,一買譯本),我都覺得非常值得。這麼點錢拿來和好書(and好譯本)為我省下來的時間相比,微不足道。

好久沒聯絡了。祝你學業順利。

 

 

傳送日期: 2001年7月3日 AM 10:16
侯大哥﹕
你好。
我是大陸的一名程序員﹐在看了你的網站之後﹐我急切的想買你的一些書﹐比如《EFFECTIVE C++》和《多型與虛擬》。但是我找了好多書店都沒有看見﹐查了一些出版社的網站也找不。真是急死我了。而你推薦的基本外文書籍也找不著原版。覺得大陸的出版社及IT界的水準確是有問題。

我看了你的大陸出版計劃後﹐知道從8月份可以陸續見到你的一些書出版﹐很是高興﹐但是又有點等不急。知道你平時很忙﹐這類的信件也肯定經常收到。但還是決定寄了。打攪了。
非常希望您能在出書的時候﹐在大陸也出版。我相信大陸有許多讀者渴望能拜讀您的大作。謝謝。

 

 

傳送日期: 2001年7月2日 PM 10:00
候先生﹐您好﹗
我是你的一位讀者﹐看過你幾本書﹐特別是<<MFC深入淺出>>,對你非常敬仰﹗﹗
這次寫信﹐不是請教你有關mfc﹐window編程系列的問題﹐這段時間我在研究工作流﹐
要寫一個原型系統﹐裡面的界面我想借鑒一下你的主頁裡的Auscomp's "1st
JavaNavigator 2000" version 5.5.0.199 這段代碼﹐我在網上找了好長時間﹐都
沒成功﹐所以找你幫忙﹐能否告訴我哪兒有源碼下載﹗﹗
希望你能在百忙之中回信﹗﹗

●侯捷回覆:Auscomp's "1st JavaNavigator 2000 是我從網上電購來的。大約新台幣1000元。這不是免費軟體,也沒有附源碼。我早已將出品公司的網址註明在侯捷網站上,只要你進入「左視窗 資料夾模式」,就會看到。

我不太理解,為什麼這種自己可以解決的問題(自己可以找到網址,可以詢問),卻常常要透過我。我可以直接告訴你網址是什麼,省得打上述這麼多字。但我就是不這麼做。你知道我的用意嗎?

 

 

傳送日期: 2001年7月2日 PM 10:07
侯先生﹕
您好﹗
上次給您寫過一封信﹐不過沒有在您的網站上看到。也許您不會(我也認為沒有必要)把您收到的每一封信都貼到網上吧﹐畢竟您的時間是寶貴的。不知有沒有人幫您打理您的個人網站﹐我想應該有﹐否則對我們廣大的讀者來說﹐知道那個寶貴的腦子在做一些typing的事﹐無疑是令人痛心的。

有兩個好消息要告訴您﹐一是我經過努力﹐終於考上了研究生﹐上海同濟大學結構工程專業(我也是土木的叛將﹐在您的網站上與我們經歷相同的人真是太多了)﹐專業方向是CAD﹐我個人希望向計算機圖形學方面發展。二是我經過一個月的學習﹐通過了SCJP考試(Sun certified Java Programmer)。說是個好消息﹐不是因為通過了考試﹐而是在學習JAVA的過程中﹐我發現對OO的本質又有了進一步的了解﹐和C++對照起來﹐感到對二者的了解同時加深了。JAVA的好處是和平臺、操作環境的聯繫不那麼緊密﹐可以踏踏實實的演練語言本質。雖然各種C++的Compiler也能生成一些“陽春的”程序﹐但是要做點什麼具體的事就難免要和Windows的紛繁複雜打交道﹐很容易迷失在API的海洋裡。我是個唯美的人﹐既然用C++就希望OO得徹底一點﹐覺得程序裡夾雜很多不OO的API函數很討厭﹐再說手裡 也沒有一本API手冊(我還沒掙過薪水呢)。

我記得大陸的程序設計普及浪潮始于83年左右﹐一個很重要的原因就是譚浩強先生的《BASIC語言》一書。BASIC雖然很笨拙﹐功能很有限﹐但是一種天生的教學語言﹐很容易入門(和同時代的其他語言相比)﹐也很容易觸及當時的程序設計思想的本質。我覺得JAVA也有這樣的優點﹐JAVA OO得很徹底﹐是學習OO比較好的範例語言。得悉您打算譯《Thinking in Java》﹐很受鼓舞。這本書的英文版和中文版我都看過﹐巨細蜚靡﹐看起來十分吃力﹐但是十分經典。據說作者曾在美國開班授課﹐對學員以T恤相贈。如果您出書時也隨贈一件印有您頭像的T恤﹐那我一定要去買一本典藏(玩笑)。

您的《深入淺出MFC 2/e》我已經看了6遍﹐都是走馬觀花﹐但已經大有收穫。希望下半年去學校之後﹐能有時間細細的摳一遍。我是性喜變化的人﹐雖然前一階段摳JAVA的Overriding特性時三天不知肉味﹐但如果要我這樣看C++就近乎自虐了。因為C++實在是有點太難了。所以請您容許我做稍稍的懶惰﹕)毫無疑問C++是太值得學一學了。但我同意您的觀點﹐
真正要能做出像樣的軟件來﹐工夫在語言之外。要學習的東西太多了﹗所以想一步登天﹐三個月拿下MFC然後就可以寫“大”軟件﹐實在是太幼稚。自從看了您的書和文章以後(我的硬盤上專門有一個文件夾存放您的文章﹐幾乎是您的網站的鏡象﹕)﹐我感到自己在技術上的進步很有限﹐但在心態和學習方法上的進步是很大的。現在我踏實多了﹐少有心浮氣躁的時候。而且也知道到哪裡去找學習資料﹐而不是兩眼盯著書店裡的那幾本爛書。現在我看外文資料的能力也有很大長進﹐主要是信心增強了。這一切與技術無關、但又大大相關的進步﹐無不是拜您所賜。 OK﹐“迷時他渡﹐悟時自渡”我現在已經可以自己劃著小船在不深的地方游一游了
希望您身體健康﹐您比我大大概15歲﹐希望您能一直寫到我看不動為止。

您的忠實讀者

●侯捷回覆:個人網站個人打理。侯捷並沒有成立公司,也沒請任何人協助做任何「企業化」動作。雖然你說「知道那個寶貴的腦子在做一些typing的事﹐無疑是令人痛心的」對我是一種恭維,但我認為自己實在沒什麼,我的腦子也沒什麼特別寶貴。我所做的,只是選擇一條不同的路,別人做技術專案(大陸稱項目),我做技術教育,如此而已。我在非常年輕的時候,就知道了自己的平庸。

恭喜你考試方面的成功。你提到「《Thinking in Java》...這本書的英文版和中文版我都看過」,哦,我譯的是《Thinking in Java 2e》﹐2e 和 1e 很不相同,因為 Java2 和 Java1 變化很大。大陸目前的譯本是 1e,我譯的是 2e。

希望你能夠「自己划著小船,愈游愈遠」。也許我曾經扮演開拓視野的角色,只要你努力,很快就能夠看見無數個更大更燦爛的空間。

 

 

 

傳送日期: 2001年7月2日 PM 07:18
尊敬的侯先生﹕
您好﹐我名叫□□﹐是浙江大學計算機系的學生﹐今年畢業﹐要到一家IT企業工作﹐現住在浙江省杭州市。

最早聽到先生的大名﹐是通過同學介紹的。後來由於程序員雜誌的原因﹐經常到www.csdn.net上轉悠﹐也不時到其上的先生您的鏡像站點看看文章﹐受益非淺。

對於先生所從事的職業抱有深深的敬意﹐謝謝先生。希望先生繼續沿ぴ這條路走下去﹐共同打造兩岸的IT出版業﹐促進交流。使我們大陸的這些讀者早日看到優秀的作品。


 

 

傳送日期: 2001年7月2日 PM 03:00
jjhou﹐您好﹗
書謅得滿好的﹐內容少了點﹐廢話多了點﹐自己狂妄自大多了點﹐視別人為白痴多了點
不值那麼多錢﹗﹗﹗﹗﹗
簡直是個垃圾
致禮﹗

 

 

傳送日期: 2001年7月2日 PM 05:24
> 尊敬的侯捷先生:
> 您好!
> 最近拜讀了您的《漫談程序員和編程》以及幾篇書評。
> 我始終覺得作為一位老師,給學生以方向才是其教書育人的根本,
> 而不是簡單地講授書本上的知識。
> 可惜,我到現在還沒有遇到象您一樣的給學生以方向的老師。
> 我最近想編寫一個有宏功能的字處理軟件,苦於不知如何實現其宏功能。
> 不知先生可否指點我該如何著手以及去哪查找這方面的資料。
>         謝謝!!

 

傳送日期: 2001年7月2日 PM 02:42
侯捷﹐您好﹗
本人姓名□□﹐現為北京□□□□系統集成公司一名軟件開發人員﹐畢業于黑龍江大學計算機科學系(您很可能沒有聽說過)﹐性別男﹐年齡25歲(好像是征婚啟示的套詞^-^)﹐現居住在北京市。
本人大三時就想學習vc的編程﹐但那時對c++與vc的關係辨彆不清﹐同時對於windows的sdk的編程知識也十分的匱乏﹐所以幾個月學習下來只覺得天旋地轉﹐卻沒有任何收穫﹐市面上的書籍多為sample類型﹐舉幾個例子然後讓大家跟著做﹐學完以後例子是作出來了﹐但腦袋裡充滿了問號﹐實際上還是不知其所以然﹐只知道這麼做﹐卻不知道為什麼﹐這十分不符合我的學習習慣﹐但一個月前得到先生的《深入淺出mfc》使我的問號全變成了感嘆號(啊﹐原來如此﹐啊﹐原來如此)﹐一面懊惱才得此書將我的vc的學習延誤了兩年﹐一面慶幸今日得此秘籍﹐使我沒有再延誤下去﹐在此特表感謝﹐並對於先生知識的淵博表以深深的敬意。
此致 敬禮﹗

●侯捷回覆:收到這樣的信,永遠令我開心感動。

 

 

傳送日期: 2001年7月2日 AM 11:20
候先生﹕您好。
我只是反饋一下﹐自下載過free的《深入淺出MFC》後﹐回饋過我的信息。現在我購買了non-free的《深入淺出MFC》2e兩本。我買的書都是正版的。我用的軟件可以買的起的也都是正版的。(小於100圓RMB是買的起的。對於學生來講)。但是我對未來的一個期望是家裡的軟件全是正版軟件。對於買盜版﹐我也說過“我喜歡...”之類的話﹐但是我現在對於這樣的說法的反應是: 居然“不以為恥﹐反以為榮”。

我下載了您的網站﹐裝在了我的硬盤上。我給學英國文學的女友上週日的自修作業是﹕閱讀《IQ誠可貴﹐EQ價更高》﹐寫讀後感。她說您的文章和余秋雨的文章有的一拼。沒想到您的文章成了英文系學生的自修材料吧。客戶群增加了﹐開香檳...:@) pig's smile.
祝﹕全家幸福。
with best wishes.


●侯捷回覆:你的簽名檔非常特別,一看到它,我便想起了你以前的來信。「贈人玫瑰之手,歷久猶有餘香」這句話是從你那兒學來的。謝謝。

余秋雨
先生是我很景仰的一位藝術家與作家,你這樣的比擬令我不知所措。事情的真象是:相差很遠。謝謝你的錯愛。

 

 

傳送日期: 2001年7月2日 AM 09:27
你好﹐侯捷老師﹗
我是一名遼寧省大連市的讀者﹐有幸拜讀了您的《深入淺出MFC》電子版﹐收益很大﹐聽說華中理工和您簽約﹐出版了簡體版﹐但因為印數太少﹐大連的書店裡已經脫銷了﹐我非常希望賣到一本﹐希望出版社能再多印。(我想可能是商家試探讀者﹐所以沒有多印)

你的書很有特點﹐讓人一讀﹐就愛不釋手﹐讓人有種撥雲見日的感覺。這種感覺已經很長時間沒有了。我買了你的另一本書《c++對象模型》﹐希望您能和大陸的出版社合作好﹐這是我們讀者的幸事。

我覺得您的話很對﹐看書看作者﹐哈哈﹐不是你的原話﹐我感覺現在大陸真的應該和台灣好好交流一下﹐我的個人觀點是台灣的電子科技總體上是比大陸先進的﹐我們有很多要向您們學習。


●侯捷回覆:只要市場還有需求,出版社便會再印。大陸幅員廣大,線上購書或許會比較方便,不至於車馬勞頓。一位讀者來信說,為了買《深入淺出MFC》,他花了RMB 一百多元的計程車費。那太可惜了。

 

候先生﹕
你好﹐我沒過上大學﹐現在是珠三角的一個打工仔。不過我非常喜歡計算機﹐用電腦的歷史有二年多了﹐自學過彙編﹐C/C++基礎﹐數據結構﹐數據庫基礎﹐微機接口技術等﹐我正學操作系統﹔我不知道怎麼才能成為一個有水準的程序員﹐我想知道﹕要按怎麼的順序才可能達到這個目的 - 請指導我的學習進程。我還要學哪些知識﹖通過自學可以達成心中理想嗎﹖

●侯捷回覆:97/06 選義按部,考辭就班

 

 

 

傳送日期: 2001年7月1日 AM 03:11
候捷老師﹕
你好
我是一名編程初學者。在csdn聽大家介紹﹐知道了你
在你的網站看了﹐雖然我不懂技術方面的東西
但是你的觀點給我很深啟發。
大家介紹c++ primer是一本初學c++的好書﹐又在你網站得知
你翻譯了此書﹐所以期望很高﹐但是我打聽很久﹐好像在大陸
買不到這本書。所以還請你百忙中抽時間告訴我能在哪裡郵購﹖
或者電子書也行。我真的很需要他。
謝謝