注册 登录
编程论坛 C++教室

关于dynamic_cast

后卿 发布于 2023-05-13 16:54, 41 次点击
程序代码:

#include <iostream>
class moveobject
{
    void virtual func( )
    {
    }
};
class human:public moveobject
{
public:
    void func( ) override
    {
        
    }
};
class monster :public moveobject
{
public:
    void func( ) override
    {
    }
};
int main()
{
    moveobject* pcture = new human();
    auto pmonster = dynamic_cast<monster*>(pcture);
    auto phuman   = dynamic_cast<human*>  (pcture);
    std::cout << phuman << " " << pmonster<<std::endl;
    system("pause");
}

为什么dynamic对于一个指针只能进行一次转换呢?这里第一次转换pcture转换成功了,第二次没有成功,为什么呢?它是将指针本身进行了转换并改变了它的类型么?
1 回复
#2
rjsp2023-05-13 22:09
为什么dynamic对于一个指针只能进行一次转换呢?这里第一次转换pcture转换成功了,第二次没有成功,为什么呢?它是将指针本身进行了转换并改变了它的类型么?
为什么你说话总是前言不搭后语呢?
明明输出 00000221E6996FE0 0000000000000000,也就是 dynamic_cast<human*>(pcture) 转化成功,而 dynamic_cast<monster*>(pcture) 转化失败。

「这里第一次转换pcture转换成功了,第二次没有成功,为什么呢?」--- 你说的 第一次 是指第27行?第二次 是指第26行?

「为什么dynamic对于一个指针只能进行一次转换呢?」--- 这跟次数有什么关系?你的结论是从哪里推导来的?
起码你写上两行,比如
auto a = dynamic_cast<human*>(pcture);
auto b = dynamic_cast<human*>(pcture);
然后一个成功,一个失败,才能勉强说是跟 次数 相关。
1