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异常

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值