zoukankan      html  css  js  c++  java
  • C++中static_cast和dynamic_cast强制类型转换

    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);
        
    }

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

  • 相关阅读:
    来自网络的双参求范围问题,没有单参求范围那么有套路!
    svn更改用户问题
    html控件中上传文件的技巧
    认识jsp
    dom4j 解析XML文件
    BaseDao优化
    JDBC连接数据库
    javascript常用函数
    jQuery formValidator(插件)
    javascriptDetect对象封装
  • 原文地址:https://www.cnblogs.com/zhouxihi/p/9650721.html
Copyright © 2011-2022 走看看