RTTI

zhongta發表於2024-08-22

class Grand{};
class Superb:public Grand{};
class Magnificent:public Superb{};

Superb *pm=dynamic_cast<Superb *>pg;
如果型別轉換成功返回Superb指標,不成功返回0
2.引用的動態轉換。
引用不回產生空,但動態轉換失敗會丟擲bad_cast異常

include

try{
Superb & rs=dynamic_cast<Superb &>(rg);
}catch(bad_cast &){
...
}
3.typeid運算子和type_info類
typeid用來檢測兩個物件是否是同一型別
type_info定義在typeinfo標頭檔案內,過載了和!=運算子用來比對型別。
typeid(Magnificient)
typeid(pg);
對比類和指標指向的物件是否是同一型別的。如果pg指向空,會扔出bad_typeid異常,該異常型別繼承於exception類,定義在typeinfo標頭檔案中。
cout<<"Now processing type "<<typeid(
pg).name()<<".\n";
輸出指標指向的物件的類名。呼叫name()方法