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
相关产品推荐
相关产品推荐

