2017-04-08 28 views
2

親ポインタから子のクラス名を取得したい。親から子のクラス名を取得

class Parent{ 
} 
class Child: Parent { 
} 

Parent* parent = new Child; 
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child" 

どうすればよいですか?

答えて

4

まず、クラスは多型でなければならない、すなわち少なくとも1つの仮想関数を持たなければならない。通常、仮想デストラクタのないベースクラスは問題のレシピであるため、これをデストラクタにします。

オブジェクトのタイプを照会し、ポインターではなく照会する必要があります。まとめ:cppreference explainsとして

class Parent 
{ 
public: 
    virtual ~Parent() = default; 
}; 

class Child : public Parent 
{ 
}; 

Parent *parent = new Child; 
cout << typeid(*parent).name(); 

[Live example]

1

は、parent多型のオブジェクトである必要があります。

つまり、Parentに少なくとも1 virtualメソッドを追加すると、目的の結果が得られます。

関連する問題