[問題] 哪種轉型比較危險??
在深入淺出MFC中提到:
「... upcasting(向上強制轉型),將會造成物件的內容被切割(object slicing),...
....."upcasting" 並不是慣用的動作,應該小心,甚至避免。」
但是在這裡 http://topic.csdn.net/t/20030523/20/1826128.html 卻提到:
class Base {
public:
int i;
};
class Dervied : public Base
{
public:
int j;
};
void f(Base b)
{ }
void h(Dervied d)
{ }
int main()
{
Derived d;
f(d); //這裡是upcast, d必定是Base的物件, 所以它是安全的
Base b;
h(static_cast <Dervied> (b)); //這裡是downcast,
// 一個Base的物件並不一定是Derived的物件,
// 所以他是危險的
}
到底upcast比較危險還是downcast呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.139.164
→
01/07 17:46, , 1F
01/07 17:46, 1F
→
01/07 17:47, , 2F
01/07 17:47, 2F
推
01/07 17:55, , 3F
01/07 17:55, 3F
→
01/07 18:02, , 4F
01/07 18:02, 4F
→
01/07 18:03, , 5F
01/07 18:03, 5F
推
01/07 18:14, , 6F
01/07 18:14, 6F
→
01/07 18:24, , 7F
01/07 18:24, 7F
推
01/08 12:50, , 8F
01/08 12:50, 8F
依個人理解,這兩種狀況的問題在於:
upcasting造成object slice,
downcasting後,使用原本base class中不存在的function會出問題,
是這樣麼??
※ 編輯: pracinverse 來自: 111.240.137.5 (01/08 21:59)
推
01/09 02:07, , 9F
01/09 02:07, 9F
→
01/09 02:09, , 10F
01/09 02:09, 10F
→
01/09 02:09, , 11F
01/09 02:09, 11F
→
01/09 02:10, , 12F
01/09 02:10, 12F