c++向上转型与向下转型(dynamic_cast)

1.向上转型 定义: 向上转型是子类指针转换成父类指针 例如:

class parent {
          
   

};
 class son:public parent {
          
   

 };
Parent* p =new son(); //Son指针转换为Parent指针

向上转型是多态的基础,可以直接进行类型转换。 2. 向下转型 定义:父类指针向下进行类型转换成为子类指针 若直接进行向下转换(Son* s=new Parent())会因为指针步长的问题(将短指针赋值给长指针)而出现类型转换错误。 向下转型一般用于多态中的父类指针转向子指针。 因为在进行多态时,通常以父类指针指向子类指针,但是由于父类指针只能够操纵父类地址中的变量函数,子类中添加的变量函数被遗漏,如果想要操纵子类新添加的变量函数怎么办呢?这时就用到了向下转型,将指向子类空间地址的父类指针转换为子类指针,重新享有子类额外的变量函数地址。

//向下转型
Parent* pSon=new Son();
Son* s=dynamic_cast<Son*>(pSon);
//若子类中新添函数myfunc()
s->myfunc();

dynamic_cast

主要用于多态中类指针的向下转型,可以检测是否可以转型成功,或者说是否有继承关系,类似于java中的instanceof只能对有虚函数的指针进行转换 基本用法: dynamic_cast可以获取目标对象的引用或指针:

T1 obj;

T2* pObj = dynamic_cast<T2*>(&obj);//转换为T2指针,失败返回NULL

T2& refObj = dynamic_cast<T2&>(obj);//转换为T2引用,失败抛出bad_cast异常

经验分享 程序员 微信小程序 职场和发展