【发布时间】:2018-05-30 11:12:51
【问题描述】:
我试图弄清楚当你 dynamic_cast 从一个派生类到另一个派生类时会发生什么。为什么下面的代码会引发分段错误?请注意,我并没有尝试将此代码用于任何事情。我只是想了解发生了什么。
同样值得注意的是,同样的代码使用static_cast。我似乎找不到任何文档来详细说明这里发生的事情。谁能解释一下?
struct base
{
virtual void printing(){cout<<"base printing"<<endl;};
};
struct derived_1 :public base
{
virtual void printing(){cout<<"derived_1 printing"<<endl;};
};
struct derived_2 :public base
{
virtual void printing(){cout<<"derived_2 printing"<<endl;};
};
int main()
{
base * b = new derived_2();
derived_1 *d_1 = dynamic_cast<derived_1*>(b);
// calling printing raises segmentation fault
d_1->printing();
}
【问题讨论】:
-
注意:尽管合法,但您应该从子类中的重写方法中删除
virtual说明符,并添加override,如void printing() override { ... }。
标签: c++11 polymorphism dynamic-cast static-cast