我想知道是否有可能通过指向基类的指针获取对象的原始类型。检查转换对象的原始类型
例如:
class Base {
virtual void f() = 0
};
class Derived: public Base {};
Base * ptr=new Derived;
//if I use
cout << typeid(ptr).name(); //prints Base*
我希望它打印原稿类型 “派生”。有没有办法做到这一点?
我想知道是否有可能通过指向基类的指针获取对象的原始类型。检查转换对象的原始类型
例如:
class Base {
virtual void f() = 0
};
class Derived: public Base {};
Base * ptr=new Derived;
//if I use
cout << typeid(ptr).name(); //prints Base*
我希望它打印原稿类型 “派生”。有没有办法做到这一点?
是的,ptr
的静态和动态类型都是Base *
。但是,对于*ptr
,情况有所不同。静态类型为Base &
,但动态类型为Derived &
。所以这是你要考什么:
cout << typeid(*ptr).name();
工作。谢谢! – mrpink121
您可以dynamic_cast
if(Derived* d = dynamic_cast<Derived*>(b1))
{
std::cout << "downcast from b1 to d successful\n";
d->name(); // safe to call
}
尽量小心,这往往被视为一种不好的做法,你真的不应该这样做。您不要need
派生类型的类,尝试根据接口来思考。
您没有*转换*'派生'为'基地'。 – CinCout