我試圖將基類對象轉換爲派生類對象dynamic_cast
,但dynamic_cast
返回null。是否有可能使用dynamic_cast
倒置?使用dynamic_cast向下轉換返回null
struct A {
virtual ~A() {}
};
struct B : A {};
int main()
{
A* a = new A();
B* b = dynamic_cast<B*>(a);
if(b){
std::cout << "b has value" << std::endl;
}else{
std::cout << "no value" << std::endl;
}
}
此代碼打印出「沒有值」。
FYI鑄造*向下*繼承鏈被稱爲向下鑄造。 – NathanOliver
你不能從A那裏得到一個B,這個語言會怎麼做,例如, B實例擁有比A實例更多的數據成員? –
你不能將'a'降爲'B *',因爲它不指向'B',它指向'A':'A'不是'B'。然而,你可以將'B *'轉換爲'A *',因爲'B *'會指向一個B,這個「是一個」A(繼承的定義) – KABoissonneault