c++ - 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++ 中执行的,您可以查看解释基本知识的cpluplus.com参考页面。然后,在您对该主题有更好的全局了解后,您可以进一步了解细节。
所以,实际上,你想要得到的是
base* d = new derived;
d->display();
哪个输出
显示派生
推荐阅读
- flutter - Flutter Android 应用程序在启动时崩溃,没有错误
- google-apps-script - GoogleSheets 触发器脚本仅在定义的时间之间运行
- node.js - 节点 - 如果一个查询失败,Mysql 事务不会回滚
- python - 将新值从表单添加到 django 中的现有值
- r - 如何删除 R 数据框中的“奇怪空间”?
- perl - 实现调度表
- rxjs - 在每次重试之前和之后发出
- c# - 如何使用 asp.net MVC 中的项目列表更新视图
- angularjs - Angularjs 引导到材质
- apache-spark - 在一个数据框中获取两列之间的 Jaccard 相似度