【发布时间】:2015-06-27 20:53:03
【问题描述】:
这是我在这个网站上的第一个问题,所以请随时强调我的用词、问题结构等方面的任何问题。
最近,我在处理多态性时开始使用dynamic_cast,并且我读到dynamic_cast 不会创建该类的另一个实例,而是创建指向该对象的指针的另一个实例。
在测试dynamic_cast 时,我遇到了这个问题。代码如下:
//main.cpp
#include <iostream>
class Base{
public:
int BaseNum;
virtual void BaseFunction(){};
};
class Derived : public Base{
public:
int DerivedNum;
virtual void DerivedFunction(){};
};
int main(){
Base * ptrBase = new Base;
ptrBase->BaseNum = 0;
Derived * ptrDerived = dynamic_cast<Derived *>(ptrBase);
ptrDerived->DerivedNum = 1;
std::cout << ptrBase->BaseNum << ptrDerived->DerivedNum << std::endl;
system("pause");
return 0;
}
程序在该行崩溃了:
ptrDerived->DerivedNum = 1;
在调试时,它说“无法读取内存”。我的结论是,如果原始内存分配是为层次结构中较高的类保留的,我不能沮丧,但我认为我可能错了。
代码哪里出错了?
【问题讨论】:
标签: c++ inheritance polymorphism dynamic-cast