提问人:Ultsi 提问时间:10/6/2023 最后编辑:Ultsi 更新时间:10/6/2023 访问量:54
CPP 继承(按子项访问父数据成员值)
cpp inheritance (access parent data member value by child)
问:
有没有办法按子项访问父项的数据成员值?以下示例:
.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
问题: 我理解“cout << bonker100.getManuID() << endl;”应该访问父级的数据成员值 (mManuID),因为该成员未设置为私有。但是,输出不是设置值“00a1d”。
问题: 孩子不能以这种方式获得父母的公共价值吗?
尝试了不同的访问说明符,将父级的数据成员从私有移动到公共。将子项和父项之间的链接设置为公共。
答:
1赞
edKotinsky
10/6/2023
#1
子类继承属性和成员,而不是值。Hammer 实例继承了 a 的成员和 public(也受保护,但在本例中没有)方法,但它的成员默认构造。 和对象是不一样的 - 它们是不同的数据片段,并且不共享它们的值。bonker100
mManuID
ToolFrame
ToolFrame
Hammer
评论
0赞
Ultsi
10/6/2023
是的。谢谢!我通过在 .h 文件中为 Parent 设置值,而不是通过创建 ToolFrame 的新实例并为该实例使用 setter 来达到我的目标。通过这种方式,Hammer 对象继承了 Parent 值。
评论
xz00
并且是不同的实例......bonker100