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

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

 class parent {

};
 class son:public parent {

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

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

//向下转型
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(&obj);//转换为T2指针,失败返回NULL

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

你可能感兴趣的:(c++基础学习)