CPP 继承(按子项访问父数据成员值)

cpp inheritance (access parent data member value by child)

提问人:Ultsi 提问时间:10/6/2023 最后编辑:Ultsi 更新时间:10/6/2023 访问量:54

问:

有没有办法按子项访问父项的数据成员值?以下示例:

.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”。

问题: 孩子不能以这种方式获得父母的公共价值吗?

尝试了不同的访问说明符,将父级的数据成员从私有移动到公共。将子项和父项之间的链接设置为公共。

C++ 继承父 访问说明符

评论

2赞 Pepijn Kramer 10/6/2023
您没有设置 bonker100(Hammer 的实例)的 manuID,而是设置了 xz00(基类的实例)的 manuID。您应该为 bonker100 设置“00a1d”以获得所需的输出
0赞 Ultsi 10/6/2023
是的。如果我有 100 个 hammer 对象,它们都具有相同的基本 ToolFrame (00a1d),那么仅通过设置 Parent 的值,为所有子项继承此值将是有效的。我认为这是继承的好处之一。我想我误会了?
2赞 Jarod42 10/6/2023
xz00并且是不同的实例......bonker100
0赞 Drew Dormann 10/6/2023
“输出应为:50 00A1D”。你为什么这么认为?您有两个不同且独立的变量,并且您只在其中一个变量中打印数据。

答:

1赞 edKotinsky 10/6/2023 #1

子类继承属性和成员,而不是值。Hammer 实例继承了 a 的成员和 public(也受保护,但在本例中没有)方法,但它的成员默认构造。 和对象是不一样的 - 它们是不同的数据片段,并且不共享它们的值。bonker100mManuIDToolFrameToolFrameHammer

评论

0赞 Ultsi 10/6/2023
是的。谢谢!我通过在 .h 文件中为 Parent 设置值,而不是通过创建 ToolFrame 的新实例并为该实例使用 setter 来达到我的目标。通过这种方式,Hammer 对象继承了 Parent 值。