【问题标题】:Friends and nested classes朋友和嵌套类
【发布时间】:2013-05-29 05:18:45
【问题描述】:

好吧,我对此感到非常疲惫。代码开始在屏幕上游动……必须睡觉。

所以!好吧,被嵌套类和朋友困扰。

这是伪代码

   class A{
     public:
          //constructor
          // member functions
     private:
          class B{
          //private
          int a();
          };

          class C{
          //private
          int b();
          };
   };

因此,一旦创建了 A 类型的对象,我希望它访问 a() 和 b()。我知道我必须为此使用朋友功能。那我应该把朋友班A放在哪里。这样表达对吗?

【问题讨论】:

  • 在从A 实例化时,是否调用bC 构造函数?

标签: c++ class friend friend-class


【解决方案1】:

如果您想从A 类中访问a()b(),您需要将friend 声明放在B 类和C 类中。但是,a()b() 不是 A 类的成员,因此您无法以您的想法访问它们。相反,您还需要将 forwarding 函数添加到 A

class A
{
public:
    //constructor
    // member functions
private:
    class B
    {
        //private
        int a();

        friend A;    // <-- make A a friend
    };

    class C
    {
        //private
        int b();

        friend A;    // <-- make A a friend
    };

public:

    // forwarding function for a
    int a()
    {
        return bdata_.a();
    }

    // forwarding function for b
    int b()
    {
        return cdata_.b();
    }

private:
    B bdata_;
    C cdata_;
};

【讨论】:

  • 在我的主要功能中,我使用此代码尝试访问 a() 和 b() objectA->a() 但是它仍然有效吗?我哪里错了?
  • a()b() 不是 A 类的成员。它们是声明它们的类的成员。
  • 它仍然无法正常工作。我尝试使用访问器函数访问 A 类中的私有数据成员,但程序抱怨非法转换。我做错了什么?
  • @Josh 你为什么不发布一个最小的代码示例来展示你想要做什么?
  • 明白了!非常感谢,只需要创建一个新的访问器函数并使其成为公共数据成员。
猜你喜欢
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多