zoukankan      html  css  js  c++  java
  • C++程序设计方法3:强制类型转换

    强制类型转换(显示转换)

    dynamic_cast<Dst_Type>(Src_var)

    Src_var必须是引用或者指针类型,Dst_Type类中含有虚函数,否则会有编译错误;

    若目标类与源类之间没有继承关系,则转化失败,返回空指针(注:失败并不是运行崩溃)

    static_cast<Dst_Type>(Src_var)

    基类对象不能转换为派生类对象,但基类指针可以转换为派生类的指针

    派生类对象(指针)可以转化为基类的对象(指针)

    没有继承关系的类之间,必须具有转换途径才能进行转换(要么自定义,要么是语言语法支持)

    #include <iostream>
    using namespace std;
    
    class B
    {
    public:
        virtual void f() {}
    };
    
    class D :public B {};
    class E {};
    
    int main()
    {
        D d1;
        B b1;
        //d1 = static_cast<D> (b1);//error:从基类无法转换回派生类
        b1 = static_cast<B>(d1);
        //b1 = dynamic_cast<B>(d1);//error:被转化的必须是指针或者引用
        B* pb1 = new B();
        D* pd1 = static_cast<D*>(pb1);
        if (pd1)
            cout << "ok" << endl;//基类指针可以转换为派生类的指针
        pd1 = dynamic_cast<D*>(pb1);
        if (pd1)
            cout << "ok" << endl;//基类不可以动态转化为派生类
    
        D* pd2 = new D();
        B* pb2 = static_cast<B*>(pd2);
        if (pb2)
            cout << "ok" << endl;//ok
        pb2 = dynamic_cast<B*>(pd2);
        if (pb2)
            cout << "ok" << endl;//ok
    
        E* pe = dynamic_cast<E*>(pb1);
        if (!pe)
            cout << "ok" << endl;//ok
    
        //pe = static_cast<E*>(pb1);//error:没有继承关系不能转换
        // E e = static_cast<E>(b1);//error:没有提供转换的途径
        return 0;
    }
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    HTML5
    PHP
    eclipse项目导入到android studio
    Jpush教材
    Android性能优化典范
    Fresco好案例
    扫二维码关注微信号,回复“送礼包”就送超值大礼!
    Android开源项目大全之工具库
    android学习“知乎”建议
    C# Json时间类型的转换
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6654210.html
Copyright © 2011-2022 走看看