看板 C_and_CPP 關於我們 聯絡資訊
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