C++强制类型转换dynamic_cast

C++强制类型转换dynamic_cast

  • dynamic_cast是C++提供的一种类型转换语法糖,它更像是一个函数。不同于其他的几种类型转换,dynamic_cast会有性能开销。
  • dynamic_cast常用于继承类型的类型转换,它维护了一个RTTI(runtime type information),如果类型转换失败,则会返回null

这里将Entity指针转换为Player指针

class Entity
{
    
    
public:
    virtual void print(){
    
    }
};
class Player : public Entity
{
    
    

};
class Enemy : public Entity
{
    
    

};

int main(){
    
    
    
    Player* p_player = new Player();
    Enemy* p_enemy = new Enemy();
    Entity* actualEnemy = p_enemy;
    Entity* actualPlayer = p_player;    // 子类可以隐式转换成父类
    // Player* p_pp = actualPlayer;        // 父类不能隐式转换成子类
    // Player* p_pp = (Player*)actualPlayer;   // 可以强制转换,但是不安全,例如转换成了一个Enemy类。
    Enemy* p_pp2 = (Enemy*)actualPlayer;       // 这个转换是错误的,但是并没有报错。
    Player* pp = (Player*)actualEnemy;
    Player* p0 = dynamic_cast<Player*>(actualPlayer);
    if (p0){
    
    
        std::cout << "转换成功" << std::endl;
    }
    else{
    
    
        std::cout << "转换失败" << std::endl;
    }
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46480020/article/details/128983485
今日推荐