C++从基类访问两个类的组合中的私有(private)成员

标签 c++ composition private-members object-composition

由于我是 C++ 的新手,所以开始吧!

我有一个基类(我没有在任何地方使用继承)和来自其他两个类的两个对象。我需要从私有(private)成员访问另一个类中的其他成员。

class base
{
private:
    myClass1 m1;
    myClass2 m2;
public:
    base() {};
    ~base() {};
};

class myClass1
{
private:
    int m_member1;
public:
    myClass1() {};

    ~myClass1() {};
};

class myClass2
{
private:
    int m_member2;
public:
    myClass2() {};

    ~myClass2() {};

    int sum_members_because_yes(void)
    {
        return (myClass1::m_member1 + m_member2); //HOW CAN I DO THIS???
    }
};

如何从 myClass2 中的 myClass1 访问 m_member1? :)

(我想避免继承,因为在我的代码中 myClass1 和 2 不是基类...)

谢谢

最佳答案

有很多方法可以做到这一点。

要完全允许访问 m_member1,您可以将 m_member1 公开。或者你可以声明一些东西是 myClass1friend,像这样:

class myClass1
{
private:
  int m_member1;
  ...
  friend class base;
};

或者这个:

class myClass1
{
private:
  int m_member1;
  ...
  friend class myClass2;
};

或者这个:

class myClass1
{
private:
  int m_member1;
  ...
  friend class int myClass2::sum_members_because_yes(void);
};

或者你可以给 myClass1 一个公共(public)访问器:

class myClass1
{
  ...
public:
  ...
  int get_m_member1() const
  {
    return(m_member_1);
  }
};

然后为了让 m2 到达 m1,你可以给 m2 一个指向 m1 的指针:

class myClass2
{
  ...
public:
  myClass1 *pm1;
};

class base
{
  ...
public:
  base()
  {
    m2.pm1 = &m1;
  };
};

或者您可以根据 m2 的请求通过 base 中继 m_member1 的值,但是这个答案越来越长。

(一旦您对所有这些感到满意,您应该注意 sum_members_because_yes 确实属于 base。)

关于C++从基类访问两个类的组合中的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230928/

相关文章:

java - 外部类成员变量null转内部类

c++ - 以下c++代码有什么问题?

design-patterns - 设计模式:合成与合成

python - 使用来自其他 Cython 代码的自定义 Cython 代码

python - 在 Python 中覆盖 "private"方法

c - 在 C 结构中隐藏成员

c# - 如何在 libtorrent 中设置客户端名称

C++ 3D 游戏引擎

c++ - 复杂类型的容器实现

dependencies - UML:组合或依赖