You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用指向子类的父类Person指针访问成员报错如何解决?

问题修复方案

错误原因

  • C++编译阶段会对指针调用的成员方法做静态检查:你使用Person类型指针调用getdata()、putdata()时,编译器会优先检查Person类的定义中是否存在对应方法,当前你的Person类没有声明这两个方法,因此直接抛出编译错误。
  • 要实现「父类指针指向子类对象时,调用子类重写的对应方法」的多态效果,必须在父类中声明虚函数作为公共接口。

修复代码

只需要修改Person类的定义,添加纯虚函数接口即可,其余代码无需调整:

class Person{
public:
    string name;
    int age;
    // 声明纯虚函数,子类必须重写这两个方法
    virtual void getdata() = 0;
    virtual void putdata() = 0;
    // 虚析构函数,避免释放子类对象时出现内存泄漏
    virtual ~Person() = default;
};

原理说明

  • 包含纯虚函数的类属于抽象类,不能被实例化,刚好符合当前场景下Person仅作为基类、不需要创建实例的需求。
  • 声明为虚函数后,程序运行时会根据指针指向的实际对象类型(是Professor还是Student),自动调用对应子类实现的getdata、putdata方法,实现你需要的多态效果。

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:21:00