访问私有或受保护 class 的构造函数?
Accessing constructor of private or protected class?
如果我有一个子class,它只能由其父class实例化,friend
是访问私有或受保护[=19]的构造函数的适当方法吗=]?
澄清一下,已经有问题建议将其作为答案。我的问题具体是关于这是否是唯一的答案,如果不是,它是否最适合这种情况。
示例:
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
的子class。正确的术语是:嵌套 class。在另一个内部声明一个 class 所隐含的关系如下:
嵌套的 class 是封闭的成员,因此具有与成员相同的访问权限(嵌套的 class 基本上是封闭的 [=20= 的隐含朋友]).
即嵌套的 class 可以访问封闭 class 的受保护和私有成员,但反之则不行。因此,如果你想调用私有或受保护的方法(例如构造函数),让他们成为朋友是可行的方法。
如果我有一个子class,它只能由其父class实例化,friend
是访问私有或受保护[=19]的构造函数的适当方法吗=]?
澄清一下,已经有问题建议将其作为答案。我的问题具体是关于这是否是唯一的答案,如果不是,它是否最适合这种情况。
示例:
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
的子class。正确的术语是:嵌套 class。在另一个内部声明一个 class 所隐含的关系如下:
嵌套的 class 是封闭的成员,因此具有与成员相同的访问权限(嵌套的 class 基本上是封闭的 [=20= 的隐含朋友]).
即嵌套的 class 可以访问封闭 class 的受保护和私有成员,但反之则不行。因此,如果你想调用私有或受保护的方法(例如构造函数),让他们成为朋友是可行的方法。