親ポインタから子のクラス名を取得したい。親から子のクラス名を取得
class Parent{
}
class Child: Parent {
}
Parent* parent = new Child;
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child"
どうすればよいですか?
親ポインタから子のクラス名を取得したい。親から子のクラス名を取得
class Parent{
}
class Child: Parent {
}
Parent* parent = new Child;
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child"
どうすればよいですか?
まず、クラスは多型でなければならない、すなわち少なくとも1つの仮想関数を持たなければならない。通常、仮想デストラクタのないベースクラスは問題のレシピであるため、これをデストラクタにします。
オブジェクトのタイプを照会し、ポインターではなく照会する必要があります。まとめ:cppreference explainsとして
class Parent
{
public:
virtual ~Parent() = default;
};
class Child : public Parent
{
};
Parent *parent = new Child;
cout << typeid(*parent).name();
は、parent
多型のオブジェクトである必要があります。
つまり、Parent
に少なくとも1 virtual
メソッドを追加すると、目的の結果が得られます。