作者: 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 )