0

私はC++の初心者なので、ここに行きます!

私は、他の 2 つのクラスからの 2 つのオブジェクトを持つ基本クラス (どこでも継承を使用していません) を持っています。プライベート メンバーから別のクラスの他のメンバーへのアクセスが必要です。

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 は基本クラスではないため、継承を避けたい...)

ありがとう

4

2 に答える 2

2

それを行うには多くの方法があります。

へのアクセスをm_member1まったく許可するには、公開することができますm_member1friendまたは、次のmyClass1ように何かを宣言することもできます。

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または、パブリック アクセサーを指定することもできます。

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

次に、m2に到達できるようにするには、へのポインターを指定m1できます。m2m1

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

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

m_member1または、 の要求に応じてベースを介しての値を中継することもできますがm2、この回答は長くなります。

(そして、これらすべてに慣れたら、 がsum_members_because_yes本当に に属していることに注意してくださいbase。)

于 2015-07-05T14:37:48.700 に答える