精華區beta CompBook 關於我們 聯絡資訊
作者: jjhou (jjhou) 標題: 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 時間: Wed Aug 19 10:37:27 1998 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 侯俊傑 1998.08.19 第一次發表於 清大.楓橋驛站.電腦書訊 CompBook 版(140.114.87.5) ------------------------------------------------- chilong (五子棋) 讀友對於我的譯作提出一些指正與疑惑, 茲回覆於下。此書即將進行第二刷,使我有機會加以修正, 謝謝 chilong。 > 小錯誤: > 1) p.194 在 [虛擬規格的存在]那段的第一行: > Abstract_base::mumble_set() 應該改為 > Abstract_base::mumble() > ==> 與 p.191 的 class 宣告對照 此為原書筆誤。我想你是對的,謝謝指正。 > 2) p.165 的圖 4.2 > Derived class 所指的 Base1 subobject > #4 Base2::mumble() 似乎不應該產生, 與 > p.159 ~ p.160 的 class Base1的定義比較 原書如此。其間是否有什麼機制,我得想一想。 > 3) p.251 最上面的程式碼 > vec_new (&knots, .....) > ^^^^^^ > 改為 knots or &knot[0] > 與 p.250 的 > void* vec_new(void *array, ....) 對照 > > 4) p.252 最上面的程式碼的最後一行 > vec_new(&knots+3, .......) > ^^^^^^^^ > 改為 knots+3 or &knots[3] > 與 p.250 的函式對照 試試看這樣: Point knots[10]; printf("%x \n", knots); printf("%x \n", &knots); printf("%x \n", &knots[0]); 你會發現,其值皆同。funny! > 5) p.253 第三行程式碼 > vec_new (&c_array, ......) > ^^^^^^^^^ > 改為 c_array or &c_array[0] 道理與上同。 > 6) p.314 中間的程式碼 > simplify_conv_op(const type &rt) > { > if (typeif (rt) == .......) > ^^^^^^^ > 改為 typeid(rt) > ...... > } 是我筆誤。謝謝指正。 > 疑惑處: > > 1) p.193 的那段程式碼, > inline void Concrete_derived::interface() const > { > .... > Abstract_base::interface(); > // 譯註: 請注意, 我們竟然可以呼叫一個 > // pure virtual function > } > 但是小弟在 VC++ 5.0 及 TC3.0 測試時, 卻不行 > 呼叫 pure virtual function.....??? 一定可以的。加油。 > 2) p.254 程式碼下面的第一行說到... > ----------------- > ........., identity 表示檔案中所定義的第一個 nonstatic > object..... > ----------------- > 見 p.254 的程式碼, identity 是一個全域物件, 需要靜態 > 初始化, 是否應該將上述 nonstatic 改成 static or global呢 ?? > 順便問一下觀念問題, global 物件算是 static 物件嗎 ?? 上述 nonstatic 的確應該改成 static。原書是 nonstatic,不過我想你是 對的。我的原文書上也殘留有我閱後的 "?" 記號。 另,global 應可視為一種 static;另有一種 local static。 --- the end  -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@CCCA.NCTU.edu.tw > -------------------------------------------------------------------------- < 作者: chilong (五子棋) 站內: CompBook 標題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 時間: Wed Aug 19 14:59:34 1998 ....... [deleted] > > 2) p.254 程式碼下面的第一行說到... ^^^^^^^^^^ sorry...my fault, 筆誤, 應是 p.243 > > ----------------- > > ........., identity 表示檔案中所定義的第一個 nonstatic > > object..... > > ----------------- > > 見 p.254 的程式碼, identity 是一個全域物件, 需要靜態 ^^^^^^^ 應改為 p.242, my fault... > > 初始化, 是否應該將上述 nonstatic 改成 static or global呢 ?? > > 順便問一下觀念問題, global 物件算是 static 物件嗎 ?? > 上述 nonstatic 的確應該改成 static。原書是 nonstatic,不過我想你是 > 對的。我的原文書上也殘留有我閱後的 "?" 記號。 > 另,global 應可視為一種 static;另有一種 local static。 > --- the end > -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: chilong.pine.ncu.edu.tw > -------------------------------------------------------------------------- < 發信人: jyhuang@csie.nctu.edu.tw (Jiun-Yao Huang), 看板: CompBook 標 題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 發信站: Computer Science & Information Engineering (Wed Aug 19 17:25:02 1998) 轉信站: maple!news.cs.nthu!news.csie.nctu!netnews.csie.nctu!jyhuang Origin: jyhuang@ccsun2.csie.nctu.edu.tw :-> 試試看這樣: :-> Point knots[10]; :-> printf("%x \n", knots); :-> printf("%x \n", &knots); :-> printf("%x \n", &knots[0]); :-> 你會發現,其值皆同。funny! &knots 這種寫法似乎是 undefined,是否應該避免? 有趣的是,原作者 (Lippman) 怎麼會這樣寫? -- Jiun-Yao Huang <mailto:jyhuang@csie.nctu.edu.tw> Uni\/\/indows Dep. of Comp. Sci. & Info. Eng., NCTU, Hsin-Chu, Taiwan, R.O.C. WW\/\/etworks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SIGSIG: signature too long (core dumped) > -------------------------------------------------------------------------- < 發信人: moli.bbs@bbs.es.ncku.edu.tw (小兔子的小狗), 看板: CompBook 標 題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 發信站: 成大工科忘情小築 (Thu Aug 20 09:26:10 1998) 轉信站: maple!news.cs.nthu!news.csie.nctu!news.civil.ncku!news.ncku!esbbs Origin: bbs.es.ncku.edu.tw ==> jyhuang@csie.nctu.edu.tw (Jiun-Yao Huang) 在文章中提到: : :-> 試試看這樣: : :-> Point knots[10]; : :-> printf("%x \n", knots); : :-> printf("%x \n", &knots); : :-> printf("%x \n", &knots[0]); : :-> 你會發現,其值皆同。funny! : &knots 這種寫法似乎是 undefined,是否應該避免? : 有趣的是,原作者 (Lippman) 怎麼會這樣寫? 是喔.. 我一直以為 &knots 代表的是"存放knots這個指標的位址"說! 而且剛剛試過.. &knots 所出來的值也跟其他兩個不同呀! -- 我~~ 心如止水,兩袖清風 ... ※ 來源:‧成大工科忘情小築 bbs.es.ncku.edu.tw‧[FROM: java154.trd.iii] > -------------------------------------------------------------------------- < 發信人: waton@bbs.ee.ntu.edu.tw (龍龍), 看板: CompBook 標 題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- … 發信站: 台大電機 Maxwell BBS (Thu Aug 20 11:58:49 1998) 轉信站: maple!news.cs.nthu!freebsd.ntu!bbs.ee.ntu!Maxwell ※ 引述《moli.bbs@bbs.es.ncku.edu.tw (小兔子的小狗)》之銘言: : ==> jyhuang@csie.nctu.edu.tw (Jiun-Yao Huang) 在文章中提到: : : &knots 這種寫法似乎是 undefined,是否應該避免? : : 有趣的是,原作者 (Lippman) 怎麼會這樣寫? : 是喔.. : 我一直以為 &knots 代表的是"存放knots這個指標的位址"說! : 而且剛剛試過.. &knots : 所出來的值也跟其他兩個不同呀! 從程式語言的觀點來看, Point knots[10] 中, knots 應該是要 視為 const value, 不過好像許多 compiler 是以 const variable 的形式來實作它. 因此 &knots 應該是 undefined 的. -- 我見青山多嫵媚, 料青山見我亦如是 有情有義有肝膽, 亦狂亦俠亦書生 -- ※ Origin: 臺大電機 Maxwell 站 ◆ From: jasmine.csie.ntu.edu.tw > -------------------------------------------------------------------------- < 作者: chilong (五子棋) 站內: CompBook 標題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- 侯俊傑回覆 時間: Thu Aug 20 19:10:52 1998 .. [deleted] > 試試看這樣: > Point knots[10]; > printf("%x \n", knots); > printf("%x \n", &knots); > printf("%x \n", &knots[0]); > 你會發現,其值皆同。funny! 我又測試過一次....... 的確照 侯 sir 上述的式子 address 都相同沒錯..... 但是如果是這樣子... printf("1: %x\n", &knot[3]); printf("2: %x\n", knot+3); printf("3: %x\n", &knot+3); 這樣子的話, 3 的位址就與 1, 2 不同了...... 所以我想, 在 p.252 (中譯本, 原文頁數我不清楚) 應該仍是有錯 ...... 而 p.251 與 p.253 應該是 "恰巧" 對了吧... 不過一般而言還是 1, 2 兩種比較適當...... [deleted] -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: chilong.pine.ncu.edu.tw > -------------------------------------------------------------------------- < 發信人: "阿睿" <sib00535@tpts1.seed.net.tw>, 看板: CompBook 標 題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- … 發信站: AIDEBBS (Fri Aug 21 01:56:52 1998) 轉信站: maple!news.cs.nthu!news.csie.nctu!aidebbs!not-for-mail Origin: m147-75.dialup.seed.net.tw 龍龍 撰寫於文章 <3QALAQ$WWE@bbs.ee.ntu.edu.tw>... >※ 引述《moli.bbs@bbs.es.ncku.edu.tw (小兔子的小狗)》之銘言: >: ==> jyhuang@csie.nctu.edu.tw (Jiun-Yao Huang) 在文章中提到: >: : &knots 這種寫法似乎是 undefined,是否應該避免? >: : 有趣的是,原作者 (Lippman) 怎麼會這樣寫? >: 是喔.. >: 我一直以為 &knots 代表的是"存放knots這個指標的位址"說! >: 而且剛剛試過.. &knots >: 所出來的值也跟其他兩個不同呀! 我以Visual C++ 5.0 以下列程式碼得到相同的結果 #include <cstdio> class Point { public: int x, y; }; int main() { Point Knots[10]; printf("%x\n",Knots); printf("%x\n",&Knots); printf("%x\n",&Knots[0]); char ch; ch=getchar(); return 0; } >從程式語言的觀點來看, Point knots[10] 中, knots 應該是要 >視為 const value, 不過好像許多 compiler 是以 const variable ^^^^^^^^^^ ^^^^^^^^^^^^^ >的形式來實作它. 因此 &knots 應該是 undefined 的. 如果照你說的意思,const variable 與const value 的位置好像相反了 因為 a reference to a value is undefined, ex: &9; 還是,我有誤會? &Knots is a pointer point to an array of 10 Point object 你可以把 &Knots 與 &Knots+1 Print 出來就知道了 > -------------------------------------------------------------------------- < 發信人: waton@bbs.ee.ntu.edu.tw (龍龍), 看板: CompBook 標 題: Re: 【chilong's <深度探索 C++ 物件模型> 問題】-- … 發信站: 台大電機 Maxwell BBS (Fri Aug 21 13:20:07 1998) 轉信站: maple!news.cs.nthu!freebsd.ntu!bbs.ee.ntu!Maxwell ※ 引述《"阿睿" <sib00535@tpts1.seed.net.tw>》之銘言: : 龍龍 撰寫於文章 <3QALAQ$WWE@bbs.ee.ntu.edu.tw>... : 我以Visual C++ 5.0 以下列程式碼得到相同的結果 : #include <cstdio> : class Point { : public: : int x, y; : }; : int main() { : Point Knots[10]; : printf("%x\n",Knots); : printf("%x\n",&Knots); : printf("%x\n",&Knots[0]); : char ch; : ch=getchar(); : return 0; : } : >從程式語言的觀點來看, Point knots[10] 中, knots 應該是要 : >視為 const value, 不過好像許多 compiler 是以 const variable : ^^^^^^^^^^ : ^^^^^^^^^^^^^ : >的形式來實作它. 因此 &knots 應該是 undefined 的. : 如果照你說的意思,const variable 與const value 的位置好像相反了 : 因為 a reference to a value is undefined, ex: : &9; It is right, so I say that &knots is undefined according to that knotes seems to be const value. : 還是,我有誤會? : &Knots is a pointer point to an array of 10 Point object : 你可以把 &Knots 與 &Knots+1 Print 出來就知道了 請比較如下二行: Point Knots[10]; Point *pKnots = Knots; 你認為 Knots 和 pKnots 是一樣的嗎 ? 我的看法是 Knots is an array of 10 Point objects. pKnots is a pointer point to an array of 10 Point objects. 一個指標算是一個變數, 在記憶體中有實際的一塊位置儲存其值. pKnots 屬之. Knots 在 C/C++ 中, 其值應該是代表著此 Array 的起始位址. 注意並沒有一塊實際的記憶體位置儲存 Knots 的值, 所以我說它是一個 value. 而且它不應該可以被改變, 故為 const. 因而我才會說 &Knots 是 undefined. 理由很明顯. 我用 gcc 2.7.2 試過你上面的 code, 結果和你一樣. 因此看來 &Knots 似乎被 解釋成 &Knots[0] 了. 我不清楚 C/C++ 的規格是否對此有定義, 可能需要查一 查吧. 注意我之前的談論是基於語言本身是否應該要對 &Knots 有定義, 而非某 特定之 Compiler 是否對其有定義. 我之前的 Post 是為了很快點出我的看法, 因而沒有作太多的說明, 可能引起你 的誤會, 另外這是 CompBook 板, 不知可否談論這些東西? -- 我見青山多嫵媚, 料青山見我亦如是 有情有義有肝膽, 亦狂亦俠亦書生 -- ※ Origin: 臺大電機 Maxwell 站 ◆ From: lily.csie.ntu.edu.tw > -------------------------------------------------------------------------- < ※ X-Info: Mave -> ric.bbs@ptt.csie.ntu.edu.tw ※ X-Sign: 0ROABK3PHueHajaHGnic (99/07/09 7:04:35 )