c ++在容器类中调用私有函数

时间:2014-11-11 15:04:14

标签: c++ container-classes

如果我有两个班级:

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;}

}

Top类包含worker类的实例。实例化worker时,会传入指向父类的指针。 之后,函数doSomeWork()被调用,需要从父级获取值,因此它调用mp_parent-> privateFunction()。

实现这一目标的最佳方法是什么? - 我真的不想让privateFunction()成为一个公共函数,如果我可以避免它,但它不能正常工作,因为它是私有的:o

还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

也许你可以使用'friend'关键字:

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;}

}

答案 1 :(得分:0)

这是朋友的经典用法:

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

   int privateFunction() {return 1;}

}

你应该考虑交朋友,并考虑是否可以重新设计以避免它们,但有时它是有道理的。