[語法] dynamic_cast請教

看板C_and_CPP (C/C++)作者 (Lucius)時間15年前 (2010/07/21 12:46), 編輯推噓2(207)
留言9則, 6人參與, 最新討論串1/1
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

07/21 12:54, , 1F
dynamic_cast失敗的話會傳回NULL
07/21 12:54, 1F

07/21 12:55, , 2F
第二個為什麼會是安全轉型? :p
07/21 12:55, 2F

07/21 13:02, , 3F
第二行怪怪的
07/21 13:02, 3F

07/21 14:16, , 4F
第二行一點都不安全啊 A 跟 B 不在同個繼承體系阿
07/21 14:16, 4F

07/21 14:23, , 5F
我以為 ptrs[0]跟[1]指標型別都是Base*就是安全轉型
07/21 14:23, 5F

07/21 14:24, , 6F
所以說應該看"指標所指向的obj型別" 對嗎? 謝謝各位喔
07/21 14:24, 6F

07/21 15:34, , 7F
安不安全當然是看當初你寫 new 的時候是 new 什麼型別。
07/21 15:34, 7F

07/21 15:35, , 8F
不同繼承體系之間要轉,可以用多重繼承的特性 teleport。
07/21 15:35, 8F

07/21 15:35, , 9F
當然這是題外話,只是回推文用的。
07/21 15:35, 9F
文章代碼(AID): #1CHdklb1 (C_and_CPP)
文章代碼(AID): #1CHdklb1 (C_and_CPP)