【问题标题】:Class friendship for subclasses子类的类友谊
【发布时间】:2016-06-08 12:26:12
【问题描述】:

我有一个类Controller,它的类Parentfriend

class Controller {

   // I can use x;

};

class Parent {
   friend class Controller;
   int x;
};

有没有办法指定Parent整个 子类层次结构将Controller 作为朋友,而不在我拥有的 300 个单独的类中明确指定它?

【问题讨论】:

  • 请注意在您的示例中发布有效代码。 FTFY。
  • 这样想。如果我有朋友,是否也必须是我儿子、父亲等的朋友?但是我的儿子、爸爸等可以要求我代表他们与我的朋友互动。
  • 回滚编辑从根本上改变了问题并使现有答案的一部分无效。请不要那样做。
  • @Cheersandhth.-Alf 让我们不要卷入回滚战。模组标志会自动升起,因此您可以不理会它,模组将决定做什么。
  • 我不明白你为什么要回滚,我写错了代码,我把朋友子句放在了错误的类中。我的问题是涉及Controller作为Parent的朋友,反之亦然,所以我更改了代码

标签: c++ friend


【解决方案1】:

回复

有没有办法指定Parent 的整个子类层次结构将Controller 作为朋友,而不在我拥有的300 个单独的类中明确指定它?

不,但您可以让Parent 为其派生类提供相关功能。

请注意,这既回答了您的原始问题,也回答了您修改(根本改变)的问题。


写。原来的问题

评论

// I can use x;

Controller 类中,其中xParent 的成员,表示您认为Controller 类中指定的友谊授予Controller 访问Parent 的私人部分的权限。

C++友谊是单向的,方向相反。

【讨论】:

  • @osnapitzkindle:我回滚了编辑,因为它使这个答案的最后一部分无效。一般来说,对问题的修改是可以的。但不是根本性的变化。
  • 确实,这不是根本性的变化。很明显,如果我真的以这种方式考虑友谊,这个问题甚至都没有意义。这不是我问的问题。
  • 请注意您发布的代码。这包括语法错误(您忘记了分号),并且它举例说明了您的意思而不是其他内容。这让我们这些非心灵感应者更容易理解它。
  • 代码只是解释性的,如果我没记错的话,在较新版本的 C++ 中甚至不需要分号。
  • @osnapitzkindle:您的语法有误,对不起。它与C兼容性有关。但这仍然对初学者不利,尤其是初学者在标头中省略分号的问题,并且编译器会喷出引用包含文件,不同文件的错误消息...
【解决方案2】:

最好使用protected 成员将它们保持在外部私有但仍可供派生类访问,这就是该关键字的真正用途:

class Controller : public Parent
{
    // Now I can use x;
};

class Parent {
protected:
   int x;
};

注意:我假设您要使用基类...

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 2014-09-30
    • 2021-12-06
    • 1970-01-01
    • 2014-01-13
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多