c++ - 访问私有(private)类或 protected 类的构造函数?

标签 c++ subclass friend

如果我有一个只应由其父类实例化的子类,friend 是否是访问私有(private)类或 protected 类的构造函数的适当方法?

澄清一下,已经有一些问题建议将其作为答案。我的问题具体是关于这是否是唯一的答案,如果不是,它是否最适合这种情况。

例子:

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);
   }
};

最佳答案

归功于@Angew 更正了此答案的第一个版本。更新来了:

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

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

即嵌套类可以访问封闭类的 protected 和私有(private)成员,但反之则不行。因此,如果您想调用私有(private)或 protected 方法(例如构造函数),让他们成为 friend 是可行的方法。

关于c++ - 访问私有(private)类或 protected 类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37613815/

相关文章:

C++ 使用 STD 解析 XML

c++ - 在临时字符串上使用基于范围的循环时为空字符?

java - 创建对象时使用继承

c++ - 友元函数范围和声明点

c++ - 如何让 lambda 成为类(class)的 friend ?

c++ - std::mutex 是否可以轻易破坏?

c++ - 使用 std C++ 在 iOS 中读取文本文件

java - Comparator/Comparable/ComparatorChain问题

ios5 - 在 iOS 5 中子类化 UIScrollView 时无法拖动对象,有帮助吗?

c++ - 如何将模板类与其 friend 模板类分离到不同的头文件中?