首页 > 解决方案 > Dynamic_cast 给出分段错误

问题描述

我知道虚函数和多态是什么。我在理解下面的代码时有点困惑。

class  base
{
        public:
        virtual void  display()
        {
                cout <<"display base";
        }

};
class derived :public base
{
        public:
        void display()
        {
                cout << "display derived";
        }
};
int main()
{
        derived *d = dynamic_cast<derived*>(new base);   // this line is giving core dump
        d->display();
return 0;
}

我不确定为什么在基类上使用 dynamic_cast 会给我带来分段错误。我应该期望输出“派生显示”作为输出。有人可以给我任何线索和更好的解释。

标签: c++virtual-functionsdynamic-cast

解决方案


正如其他人所说,您在这里做的事情是非法的。

您在这里尝试利用的多态性,它是关于指向具有其父接口的派生对象,但是当您尝试使用其子接口解释祖先的实例时,您会得到一个错误。

如果您想更好地检查该技术是如何在 C++ 中执行的,您可以查看解释基本知识的cpluplus.com参考页面。然后,在您对该主题有更好的全局了解后,您可以进一步了解细节。

所以,实际上,你想要得到的是

    base* d = new derived;
    d->display();

哪个输出

显示派生


推荐阅读