【问题标题】:C++ Access private member from a derived class to another derived class (both have the same base class)C++从一个派生类访问私有成员到另一个派生类(都具有相同的基类)
【发布时间】:2015-07-05 10:58:43
【问题描述】:

所以我有一个带有两个派生类(deriv1 和 deriv2)的基类。 在 deriv2 类上,我需要从 deriv1 访问私有成员... 我该怎么做?

示例代码:

    class base
    {
    private:

    public:
        base() {};
        ~base() {};
    };

    class deriv1 : public base
    {
    private:
        int m_member1;
    public:
        deriv1() {};

        ~deriv1() {};
    };

    class deriv2 : public base
    {
    private:
        int m_member2;
    public:
        deriv2() {};

        ~deriv2() {};
    int sum_members_because_yes(void)
    {
        return (deriv1::m_member1 + m_member2); // <---- :((
    }
};

如何从另一个派生类访问私有成员? 我试图避免使用朋友功能,或将私人成员更改为公开...您有什么建议?

谢谢! :)

【问题讨论】:

  • 您只能访问派生类中的公共或受保护成员。
  • deriv2 没有理由包含来自deriv1 的字段。你想建模什么?

标签: c++ inheritance private-members


【解决方案1】:

您无法从deriv2 访问deriv1 私有数据成员。
你有两种选择来克服它:

在你的deriv1 类中做一个getter 来访问你的m_member1

class deriv1 : public base
{
private:
    int m_member1;
public:
    int get_member1() const { return m_member1; }
[...]
}

m_member1 上使用protected 并使您的deriv2 也派生自deriv1

 class deriv1 : public base
 {
 protected:
   int m_member1;
   [...]
 }

class deriv2 : public base, public deriv1
{ 
  [...]
}

使用似乎与您的上下文一致的选项。

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多