关于父类强转子类的小问题

如下简单的代码所示,不理解为什么这么写后,父类指针还是无法调用子类的特有成员函数

void test01()
{
    //base为父类  Person为子类
    Base *p = new Person;
    p->myBase();
    Person *per = (Person*)p;
    p->myPerson();    //执行后报错
}
  • p指针 还是 Base父类,当然不能引用子类的方法
  • 你需要使用 per 指针引用, per->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
}