【发布时间】:2020-08-02 23:37:12
【问题描述】:
class X
{
int Xi;
class Y
{
int Yi;
void func()
{
X x;
x.Xi = 5;
}
};
void func()
{
Y y;
y.Yi = 5;
// ^^^^ 'X::Y::Yi': cannot access private member declared in class 'X::Y'
}
};
我正在学习 Memento 模式,并且在我阅读的书中指出,实现该模式的方法之一是在 Originator 类中编写 Memento 类,这样只有 Originator可以访问Memento 类的私有成员。当我尝试应用此方法时,我收到一条错误消息,告诉我私有成员不可访问。我知道我可以使用关键字friend,这将使我能够访问私人成员。我也知道我可以从内部类访问外部类的私有成员。但是为什么内部类不能访问内部类的私有成员呢?
例如,我可以在 java 中做到这一点:
public class X {
int Xi;
public class Y
{
private int Yi;
public void func()
{
X x = new X();
x.Xi = 5;
}
}
public void func()
{
Y y = new Y();
y.Yi = 5;
}
}
为什么它在 C++ 中不可行?
【问题讨论】:
标签: c++ class private inner-classes access-specifier