- 要使用dynamic_cast动态类型转换,必须满足下面条件:
- 1、基类至少要有一个虚函数
- 2、需要多态性
- 3、编译器打开RTTI检查
- dynamic_cast功能:
- 当某些情况下不能使用运行时多态的时候,就可以用dynamic_cast代替,例如:
- struct Base
- {
- virtual void func(){}
- };
- struct D : public Base
- {
- void func(){}
- void f(){}
- };
- void test(Base* b)
- {
- /* 如果要进行强制转换,则需要保证转换是正确的。 */
- if(D* d = dynamic_cast<D*>(b))
- d->f();
- else
- cout << "change fail !" << endl;
- }
- void main()
- {
- /*
- d通过函数test进行传参,通过转换变为Base类型的指针
- 如果想转换回之前指向D类的指针,可以使用强制转换
- 但这个转换必须是我们知道的,如果转换失败,则返回
- 0。如果是引用转换失败,抛出bad_cast异常。
- */
- D* d = new D;
- test(d);
- }