前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中static_cast和dynamic_cast强制类型转换

C++中static_cast和dynamic_cast强制类型转换

作者头像
周希
发布2019-10-15 11:54:16
5520
发布2019-10-15 11:54:16
举报
文章被收录于专栏:APP自动化测试APP自动化测试

C++中提供了两种类型转换的方法: static_cast和dynamic_cast

简单从名字看一个是静态转换, 另一个是动态转换

一般转换分为两种: 上行转换和下行转换

上行转换大致意思是把子类实例向上转换为父类型, 下行转换是把父类实例转换为子类实例

通常子类因为继承关系会包含父类的所有属性, 但是有些子类的属性父类没有

所以上行转换的时候,子类实例转换给父类是安全的, 转换后的指针或者对象可以放心使用父类的所有方法或者属性

但是下行转换的时候可能是不安全的, 因为假如子类有父类没有的属性或者方法的话, 父类指针或者实例转换为子类型后

转换后的实例中并没有子类多出来的方法或属性, 当调用到这些方法或属性时程序就会崩溃了

举个栗子:

#include <iostream>
using namespace std;


class Base{

    int a;
public:
    void baseMethod(){
        cout << "Base method" << endl;
    };
};

class ChildClass: public Base{
    int b;
public:
    void childMethod(){
        cout << "child method" << endl;
    };
};

int main(){

    /* 上行转换 */
    ChildClass child;
    Base b = static_cast<Base>(child);
    b.baseMethod();
    
    /* 下行转换 */
    Base bb;
    ChildClass cc = static_cast<ChildClass>(bb);
    
}

有的编译器会校验下行转换, 会提示错误

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档