精華區beta CompBook 關於我們 聯絡資訊
作者: jjhou (jjhou) 標題: <虛擬與多型> 的幾點疑問... 侯俊傑答覆 時間: Wed Sep 9 17:46:32 1998 <虛擬與多型> 的幾點疑問... 侯俊傑答覆 網友 Imanaka 的一封信,提到他對於 <虛擬與多型> 一書的幾點疑惑如下。 感謝您的熱心。此書有些技術上的修正,請參考 <虛擬與多型 修正與補充> 一文。 > 作者 Imanaka (C++ Zealot) 站內 CompBook > 標題 關於虛擬與多型的幾點疑問... > 時間 Wed Sep 9 16:13:26 1998 > ─────────────────────────────────────── > p.107 > 最後一行註解提到"我們無法以cout operator<<輸出16進位格式" > 其實只要寫cout << hex << var; 就可以以十六進位輸出了 是的,請見 <虛擬與多型 修正與補充> 一文。 > p.124 > "似乎沒有辦法可以把一個long(雖然我們知道他是一個指標值)強制轉形 > 成函示指標(不論是member function或是一般的global function)" > 這句話有點問題 long 可以用 reinterpret_cast 轉成 void* > 所以global function 應該是沒問題的... > 至於member function ,好像是不行..... 書中疑慮已經 台南 陳星光讀友協助解決,請見 <虛擬與多型 修正與補充> 一文。 > p.183 > " reinterpret_cast 這個運算子最接近舊時代的C轉型動作" > > 這句話我想是錯誤的...在more effective C++ 中有提到最接近 > C的cast 是 static_cast... > 在這一期的C++ report p.12 > > "An old-style(C style)cast is interpreted as static_cast if possible > ,otherwise as a reinterpret_cast,either one possibly followed by a > const_cast (the actual rule is more complicated , but this gives you > the idea)" 這一部份,我需要做點功課,再回答。同時我也很想聽聽大家的看法。 喔,對了,Imanaka,還記不記得你在 <大奧秘> 一書出版時 post 的 一封信。因你的那封信,使我雄心大起,決定再把 Walter Oney 的 <System Programming for Windows 95 > 也譯出來。現在已近尾聲,但是,哎, 真真累死我了。 別想再誘我譯 <Inside OLE>,呵呵。 anyway,感謝你。 --- 侯俊傑 1998.09.09  -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@CCCA.NCTU.edu.tw > -------------------------------------------------------------------------- < 發信人: william.bbs@cis.nctu.edu.tw (何陋居主), 看板: CompBook 標 題: Re: <虛擬與多型> 的幾點疑問... 侯俊傑答覆 發信站: 交大資科_BBS (Wed Sep 9 23:59:37 1998) 轉信站: maple!news.cs.nthu!news.cis.nctu!cis_nctu Origin: cissun53 ==> 在 jjhou.bbs@bbs.cs.nthu.edu.tw (jjhou) 的文章中提到: > > p.183 > > " reinterpret_cast 這個運算子最接近舊時代的C轉型動作" > > 這句話我想是錯誤的...在more effective C++ 中有提到最接近 > > C的cast 是 static_cast... > > 在這一期的C++ report p.12 > > "An old-style(C style)cast is interpreted as static_cast if possible > > ,otherwise as a reinterpret_cast,either one possibly followed by a > > const_cast (the actual rule is more complicated , but this gives you > > the idea)" > 這一部份,我需要做點功課,再回答。同時我也很想聽聽大家的看法。 我覺得, "最接近" 可分兩個角度來看. 若從 "使用頻率" 角度來看, 我們大部份的人應該都相信 C 程式員是好人, 不會故意亂用轉型動作, 因此, "大部份" 的 C 轉型運算式, 應該是屬於 C++ 的 static_cast 這一型; 這也正是 Scott Meyers 所謂的 "interpreted as static_cast if possible". 不過, Scott 的這說法, 也有另一層隱含的意思喲... C++ 會試著先以最保守最安全的 static_cast 來玩, 不成, 才試著降低門檻, 改用其他較寬鬆但較危險的轉型運算子... 因此, 若撇開 "使用頻率", 純就純純粹粹的程式語言的立場, 從 "expressive power" 或 "functional power" 角度來看, C 的轉型動作, 可算是一種 "無條件式" 的轉型, 和 C++ 的 {static,const,dynamic}_cast 這種 "有條件式" 的轉型, 的確是隔得比較遠一點; 在精神上及威力上來說, 和 C++ 的 reinterpret_cast 的確比較吻合. 侯老大應該是站在純語言的表現力及威力的角度, 提出這個 "最接近" 的說法. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 一個人的最佳讀書狀態大多產生在中年以後, 但能否取得這種狀態則取決於青年時期的準備。 《余秋雨台灣演講》 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- * Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3> > -------------------------------------------------------------------------- < ※ X-Info: Mave -> ric.bbs@ptt.csie.ntu.edu.tw ※ X-Sign: 0ROABK7PH3hgAvkteRAo (99/07/09 7:04:39 )