[問題] Modern C++ design小問題想請教

看板C_and_CPP (C/C++)作者 (allstars)時間14年前 (2011/10/19 00:26), 編輯推噓0(009)
留言9則, 4人參與, 最新討論串1/1
在Modern c++ Design裡的P67裡 有下面的code WidgetInfo obj; string name = (static_cast<Holder<string> & >(obj)).value_; 其中WidgetInfo 是有繼承Holder<string> 我知道pointer才有polymorphism 但看不太懂 static_cast 裡面是給reference是什麼意思 這個出來的是跟 WidgetInfo* obj; string name = ((Holder<string>*)obj)->value_; 一樣嗎 ? 就是obj那pointer有offset到Holder<string>那 而這指到Holder<string>那的pointer也能再回到原本WidgetInfo的address 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.135.229

10/19 00:29, , 1F
不就是轉型嗎?(._.?)
10/19 00:29, 1F

10/19 01:33, , 2F
只要沒被 copy constructor slice 過都會有多型
10/19 01:33, 2F

10/19 01:48, , 3F
第二種是不指定轉型方法的寫法, 編譯器會去猜你想達成
10/19 01:48, 3F

10/19 01:49, , 4F
的手法來產生不同code, http://ppt.cc/8OxI 在清單中
10/19 01:49, 4F

10/19 01:51, , 5F
若有多種可行轉換就會採取最上層的, 猜錯就糟了
10/19 01:51, 5F

10/19 01:54, , 6F
子類別往上轉是沒什麼疑問, 因為你要完整看到父類的模
10/19 01:54, 6F

10/19 01:54, , 7F
樣才有辦法編譯過, 但是子類別互轉/父類轉子類因為可
10/19 01:54, 7F

10/19 01:56, , 8F
知資訊比較少, 隨便轉再取值就很危險
10/19 01:56, 8F

10/20 00:29, , 9F
thanks
10/20 00:29, 9F
文章代碼(AID): #1EdQYW-D (C_and_CPP)
文章代碼(AID): #1EdQYW-D (C_and_CPP)