C ++朋友类

时间:2010-11-15 18:38:37

标签: c++ friend

试图确保我已经正确地理解了这个朋友

class A
{
  friend class B;
  int valueOne;
  int valueTwo;
  public:
  int GetValueOne(){ return valueOne; }
}
class B
{
  public:
  A friendlyData;
  int GetValueTwo(){ return friendlyData.valueTwo; }
}
main()
{
  B myObject;
  myObject.friendlyData.GetValueOne(); // OK?
  myObject.GetValueTwo(); // OK?
}

关于那个代码,如果我们忽略了初始化的缺乏,那么main中的两个函数还行吗?除了做一些时髦的东西之外,他们应该没有办法从这些类中获取数据......在这些类的外面,B.A没有可访问的数据,只有成员函数。

2 个答案:

答案 0 :(得分:2)

是的,main中的两个已识别呼叫都可以。它们涉及3位成员的访问权限:B::AB::GetValueTwoA::GetValueOne。所有这些都具有public可访问性并且不暴露任何私有类型。因此,它们可以在任何地方使用,包括main

答案 1 :(得分:0)

看起来很合理,因为两个GetValueX方法都是公共的,因此调用很好。对GetValueTwo()电话的呼叫充分利用了它的友谊。

警告:友谊可以打破你设计中的封装。