簡體   English   中英

檢查對象在C ++中的哪個子類?

[英]Check which subclass an object is in C++?

鑒於存在以下結構類型:

struct A {};
struct B : A {};
struct C : A {};
struct D : B {};

我們有一段代碼:

A a = f();

你如何檢查結構實際是什么類型? 即是ABC還是D

如果需要,我可以給出我試圖使用答案的上下文,但我不認為這是必要的。

請注意,C ++中的polimorphism僅適用於指針和引用,如果按值返回A,它將始終為A.如果函數f()返回類型B的類,則會發生切片

如果更改函數以返回指向A的指針,則可以使用動態強制轉換並檢查是否返回null。

A *a=f();
B *b=dynamic_cast<B*>(a);
if(b!=NULL)
{
    //a was of type B
}

它是A型。 為什么? 因為切片。

但是,如果f()返回A& ,並且您使用了A& a = f(); 相反,那么你有兩個選擇(都涉及RTTI):

  1. 您可以使用typeid(a)並查看其name()或與各種(子)類的type_info對象進行比較。

  2. 您可以使用dynamic_cast :例如,如果a不是D類型, dynamic_cast<D*>(&a)將返回null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM