作者jehovah (Lucius)
看板C_and_CPP
標題[語法] dynamic_cast請教
時間Wed Jul 21 12:46:36 2010
dynamic_cast的用法我所知如下:
dynamic_cast<son*> (fatherPtr);
會將 fatherPtr轉成 son型別的指標
成功的話會傳回 fatherPtr所指的位址
假設
class Base{
public:
virtual ~Base(){}; };
class A : public Base{};
class B : public Base{};
vector <Base*> ptrs(2);
ptrs[0] = new A;
ptrs[1] = new B;
疑問
A* ptr1 =
dynamic_cast<A*> (ptrs[0]);
^^^^^^^fatherPtr指向A obj
A* ptr2 =
dynamic_cast<A*> (ptrs[1]);
^^^^^^^fatherPtr指向B obj
這兩個敘述都應該是安全轉型..
為什麼第二行ptr2收到的會是0呢?
查了些資料還是想不通..請幫忙解答, 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.69.128.66
推 dustlike:dynamic_cast失敗的話會傳回NULL 07/21 12:54
→ AlanSung:第二個為什麼會是安全轉型? :p 07/21 12:55
→ anotherday:第二行怪怪的 07/21 13:02
推 nowar100:第二行一點都不安全啊 A 跟 B 不在同個繼承體系阿 07/21 14:16
→ jehovah:我以為 ptrs[0]跟[1]指標型別都是Base*就是安全轉型 07/21 14:23
→ jehovah:所以說應該看"指標所指向的obj型別" 對嗎? 謝謝各位喔 07/21 14:24
→ tinlans:安不安全當然是看當初你寫 new 的時候是 new 什麼型別。 07/21 15:34
→ tinlans:不同繼承體系之間要轉,可以用多重繼承的特性 teleport。 07/21 15:35
→ tinlans:當然這是題外話,只是回推文用的。 07/21 15:35