dynamic_cast
这是一种安全的转换,如果转换失败他会返回NULL,但必须要有虚函数,它既可以向上转换也可以向下转换
class Base
{
public:
virtual void Draw()
{
cout << "Base Draw" << endl;
}
void init()
{
cout << "init Draw" << endl;
}
};
class object :public virtual Base
{
public:
void Draw() override
{
cout << "object Draw" << endl;
}
};
int main()
{
//向下转换 父类转子类
{
Base* bs = new object();
if (object* bj = dynamic_cast<object*>(bs))
{
bj->Draw();
}
}
//向上转换 子类转父类 这个一般很少用
{
object* bs = new object();
Base* bj1 = dynamic_cast<Base*>(bs);
bj1->init();
//一般可以隐式的直接转 很少用dynamic_cast的向上转换
Base* bj2 = bs;
bj2->init();
}
}