试图确保我已经正确地理解了这个朋友
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
没有可访问的数据,只有成员函数。
答案 0 :(得分:2)
是的,main
中的两个已识别呼叫都可以。它们涉及3位成员的访问权限:B::A
,B::GetValueTwo
和A::GetValueOne
。所有这些都具有public
可访问性并且不暴露任何私有类型。因此,它们可以在任何地方使用,包括main
。
答案 1 :(得分:0)
看起来很合理,因为两个GetValueX
方法都是公共的,因此调用很好。对GetValueTwo()
电话的呼叫充分利用了它的友谊。
警告:友谊可以打破你设计中的封装。