0

2 つのクラスがある場合:

class worker
{
   Top *mp_parent;

   worker(Top *parent) : mp_parent(parent) {};

   int doSomeWork()
   {
      int i = mp_parent->privateFunction(); // This is the function I want to call
   }
}

class Top
{
   private:
   worker m_Worker;

   int privateFunction() {return 1;}

}

トップクラスにはワーカークラスのインスタンスが含まれています。ワーカーがインスタンス化されると、親クラスへのポインターが渡されます。後で、親から値を取得する必要がある関数 doSomeWork() が呼び出されるため、mp_parent->privateFunction() が呼び出されます。

これを達成するための最良の方法は何ですか?・privateFunction()は避けられるなら本当はpublic関数にしたくないのですが、privateなのでそのままでは動きません:o

他のオプションはありますか?

4

2 に答える 2

1

たぶん、「友達」キーワードを使用できます。

class worker
{
   Top *mp_parent;

   worker(Top *parent) : mp_parent(parent) {};

   int doSomeWork()
   {
      int i = mp_parent->privateFunction(); // This is the function I want to call
   }
}

class Top
{
   friend class worker;
   private:
   worker m_Worker;

   int privateFunction() {return 1;}

}
于 2014-11-11T15:08:30.987 に答える
0

これは友人の典型的な使い方です:

class Top
{
   private:
   friend class Worker;
   worker m_Worker;

   int privateFunction() {return 1;}

}

友達を作ることについてはよく考え、友達を避けるために再設計できるかどうかを検討する必要がありますが、場合によってはそれが理にかなっている場合もあります。

于 2014-11-11T15:12:27.773 に答える