zoukankan      html  css  js  c++  java
  • 类型转换(静态转换:static_cast)

    静态转换

    • 使用方式  static_cast< 目标类型>(原始数据)
    • 可以进行基础数据类型转换
    • 父与子类型转换
    • 没有父子关系的自定义类型不可以转换

    1.普通类型

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //静态转换  static_cast<要转成的类型>(待转变量);
    //基础类型
    void test01()
    {
        char a = 'a';
        double d = static_cast<double>(a);
        cout << typeid(d).name() << endl;
    }
    
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }

    结果:

    2.父子关系

    取地址*转换

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //静态转换  static_cast<目标类型>(原始对象);
    //1.基础类型转换
    void test01()
    {
        char a = 'a';
        double d = static_cast<double>(a);
        cout << typeid(d).name() << endl;
    }
    //2.父子之间转换
    class Base{};
    class Child:public Base{};
    class Other{};
    void test02()
    {
        Base* base = NULL;
        Child* child = NULL;
        //把Base转成Child 向下转换 不安全
        Child* c2 = static_cast<Child*>(base);
    
        //把Child转成Base 向上转型 安全
        Base* b2 = static_cast<Base*>(child);
    
        //转Other类型
        Other* other = static_cast<Other*>(base); //error 类型转换无效 因为它们没有父子关系
    }
    int main()
    {
        test02();
        //test01();
        system("Pause");
        return 0;
    }

    应用转换

        Animal ani_ref;
        Dog dog_ref;
        //继承关系指针转换
        Animal& animal01 = ani_ref;
        Dog& dog01 = dog_ref;
        //子类指针转成父类指针,安全
        Animal& animal02 = static_cast<Animal&>(dog01);
        //父类指针转成子类指针,不安全
        Dog& dog02 = static_cast<Dog&>(animal01);
  • 相关阅读:
    PY个树状数组
    PY 个板子计划【雾
    PY个欧拉筛
    【NOI2007】项链工厂 ——老题新做.jpg
    Min-Max 容斥的证明
    51nod 1963 树上Nim
    ●BZOJ 3566 [SHOI2014]概率充电器
    ●BZOJ 3640 JC的小苹果
    ●BZOJ 1444 [Jsoi2009]有趣的游戏
    ●Joyoi Dotp 驱逐猪猡
  • 原文地址:https://www.cnblogs.com/yifengs/p/15182674.html
Copyright © 2011-2022 走看看