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

C++继承中子类访问父类公共成员值不符合预期问题咨询

问题分析与解决方案

问题背景

子类通过公有继承父类,父类成员mManuID为公共访问权限,子类对象调用父类的getManuID()方法却未输出预期值,怀疑是继承访问权限问题,调整访问修饰符和继承方式后问题依旧。

代码展示

.h 文件

#ifndef PRAC_H
#define PRAC_H
#include <iostream>
using namespace std;

class ToolFrame {
    public:
        string  mManuID;
        void    setManuID(string manu_id) { mManuID = manu_id; }
        string  getManuID() { return mManuID; }
};

class Hammer : public ToolFrame {
    int     mDurability;
    public:
        void    setDurability(int durability) { mDurability = durability; }
        int     getDurability() { return mDurability; }
};

.cpp 文件

#include "prac.h" 

int main() {
    ToolFrame xz00;
    Hammer bonker100;

    xz00.setManuID("00a1d");
    bonker100.setDurability(50);
    cout << bonker100.getDurability() << endl;
    cout << bonker100.getManuID() << endl;

    return 0;
}

输出对比

  • 实际输出:

    50

  • 预期输出:

    50
    00a1d

问题原因

你的继承写法完全正确,子类可以正常通过公有继承访问父类的公共成员。问题出在对象的独立性上:你给父类对象xz00的mManuID赋值,但子类对象bonker100是完全独立的另一个实例,它的父类部分成员mManuID从未被赋值,因此调用getManuID()会返回空字符串,自然没有输出预期内容。

每个对象都拥有自己独立的成员变量,xz00和bonker100的mManuID互不干扰,给其中一个赋值不会影响另一个。

解决方案

直接给子类对象bonker100调用父类的setManuID()方法赋值即可,修改后的main函数代码如下:

#include "prac.h" 

int main() {
    Hammer bonker100;

    bonker100.setDurability(50);
    bonker100.setManuID("00a1d"); // 给子类对象自身的父类成员赋值
    cout << bonker100.getDurability() << endl;
    cout << bonker100.getManuID() << endl;

    return 0;
}

运行修改后的代码就能得到预期输出,因为此时bonker100自己的mManuID被正确赋值,调用getManuID()会返回设置的"00a1d"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:43:32