访问私有或受保护类的构造函数?

时间:2016-06-03 11:58:49

标签: c++ subclass friend

如果我的子类只能由其父类实例化,那么friend是否是访问私有或受保护类的构造函数的适当方法?

为了澄清,已经有人提出这样的问题作为答案。我的问题具体是关于这是否是唯一的答案,如果没有,是否最适合这种情况。

示例:

class Class_A {
public:
   class Class_B {
      // Adding 'friend' keyword here
      friend class Class_A;

      int _value;

      Class_B(
         int value)
      :
      _value(value)
      {
      }
   };

protected:
   static Class_A::Class_B createB(
      int value)
   {
      return Class_B(value);
   }
};

1 个答案:

答案 0 :(得分:1)

为了更正此答案的第一个版本,可以转到@Angew。更新来了:

您实际上使用了错误的术语:Class_B不是Class_B的子类。正确的术语是:嵌套类。通过在另一个类中声明一个类隐含的关系如下:

嵌套类是封闭类的成员,因此具有与成员相同的访问权限(嵌套类基本​​上是封闭类的隐式朋友)。

即。嵌套类可以访问封闭类的受保护和私有成员,但不能相反。因此,如果你想调用一个私人或受保护的方法(例如构造函数),那么就可以让他们成为朋友。