C++朋友班

发布于 2024-10-02 18:12:33 字数 488 浏览 6 评论 0原文

只是想确保我已经正确理解了朋友们关于这段

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 中的两个函数就可以了,对吗?除了做一些时髦的事情之外,他们应该没有其他方法从这些类中获取数据......在这些类的外部,BA没有可访问的数据,只有成员函数。

Just trying to make sure I have understood friends properly with this one

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

In reference to that code about, if we ignore the lack of initialising, the two functions in main would OK right? And besides doing some funky stuff, their should be no other way to get the data from these classes... To the out side of these class, B.A has no accessible data, just the member function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

燃情 2024-10-09 18:12:33

是的,main 中识别的两个调用都正常。它们涉及 3 个成员的访问:B::AB::GetValueTwoA::GetValueOne。所有这些都具有公共可访问性并且不公开任何私有类型。因此它们可以在任何地方使用,包括 main

Yes the two identified calls in main are OK. They involve the access of 3 members: B::A, B::GetValueTwo and A::GetValueOne. All of which have publicaccessibility and expose no privae types. Hence they're usable from anywhere including main.

悍妇囚夫 2024-10-09 18:12:33

看起来很合理,因为两个 GetValueX 方法都是公共的,因此调用没有问题。对 GetValueTwo() 调用的调用利用了它的友谊。

警告:友谊可能会破坏设计中的封装。

It looks reasonable as both of the GetValueX methods are public and so the calls are fine. The call to GetValueTwo() call makes use of its friendship.

Word of warning: friendship can break the encapsulation in your design.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文