如下简单的代码所示,不理解为什么这么写后,父类指针还是无法调用子类的特有成员函数
void test01()
{
//base为父类 Person为子类
Base *p = new Person;
p->myBase();
Person *per = (Person*)p;
p->myPerson(); //执行后报错
}
主要因为父类和子类内存结构不同,如果myPerson没有使用子类特有成员,还是可以的。
还有一点,父类指针转子类最好用dynamic_cast
你只是把p强转为Person*
类型,并赋值给per,p并不会有变化,应该是per吧:
void test01()
{
//base为父类 Person为子类
Base *p = new Person;
p->myBase();
Person *per = (Person*)p;
per->myPerson(); //执行后报错——改成per
}