【问题标题】:In C++ how do I access a private base member variable in an inherited class?在 C++ 中,如何访问继承类中的私有基成员变量?
【发布时间】:2017-03-16 12:26:23
【问题描述】:
class Foo {
private:
    string x;
};

class Bar : public Foo {
public:
    void get_data() {
        cin >> x;
    }
};

我不太明白为什么这行代码不起作用。能做到这一点不就是继承成员变量的目的吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    private 对子类隐藏。只有friends(和Foo 本身)可以访问它。也许您希望 x 成为 protected

    【讨论】:

    • 嗯,我以为所有的成员变量包括私有变量都是继承的。stackoverflow.com/questions/14270631/…
    • @Goldname 确定它们在那里,但无法访问。
    • @Goldname Private 成员是继承的,因为它们存在于派生对象的内存表示中。但是你不能在你的代码中使用它们(即基类开发者无意维护私有内容的向后兼容性)。
    【解决方案2】:

    这是不可能的。 private 表示该变量的名称只能由该类(以及任何 friends)访问。

    访问说明符protected 表示该类、派生类和朋友可以访问。您可以将x 设为protected,或将get_data() 移至Foo 的公共部分。

    【讨论】:

    • 不是为 Bar 继承的字符串吗?
    • @Goldname 是的,但是这个名字被继承为no access,所以你不能使用名字x来访问它。
    • 那它被继承的目的是什么?
    • @Goldname Inheritance 表示“is-a”关系。 Bar 是带有附加功能的 Foo。所以所有的Foo 都被继承了。
    • 是的,但是我无法在 Bar 中访问或设置 Foo 的任何属性,那有什么用呢?
    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2017-03-11
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多