zoukankan      html  css  js  c++  java
  • 类型转换(动态转换)dynamic_cast

    动态转换

    • 不可以转换基础数据类型
    • 父子之间可以转换
    • 父转子 不可以
    • 子转父 可以
    • 发生多态 都可以

    1.基础类型不可以转换

    2.父子关系 向上转 可以 向下转 不安全就不可以

    注意:

    dynamic_cast如果发生了多态,那么可以让基类转成派生类,向下转换

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //void test01()
    //{
    //    char a = 'a';
    //    //dynamic_cast非常严格 失去精度 或者不安全 都不可以转换
    //    double d = dynamic_cast<double>(a); //error 
    //}
    
    class Base 
    {
        virtual void func(){}
    };
    class Child :public Base 
    {
        virtual void func(){}
    };
    class Other {};
    
    void test02()
    {
        Base* base = NULL;
        Child* child = NULL;
    
        //Child转Base 安全
        Base* b2 = dynamic_cast<Base*>(child);
    
        //Base转为Child 不安全
        //Child* c2 = dynamic_cast<Child*>(base);
    
    
        //dynamic_cast如果发生了多态,那么可以让基类转成派生类,向下转换
        Base* base2 = new Child;
        Child* child2 = dynamic_cast<Child*>(base2);
    }
    int main()
    {
    
        system("Pause");
        return 0;
    }
  • 相关阅读:
    C#学习笔记
    Visual Studio 快捷键
    java 8 中lambda表达式学习
    Spfa算法
    dijkstra算法
    topSort
    并查集--学习详解
    trie树--详解
    POJ1988 并查集的使用
    Mybatis的一级缓存和二级缓存
  • 原文地址:https://www.cnblogs.com/yifengs/p/15182735.html
Copyright © 2011-2022 走看看