给出以下代码而不考虑两个类之间的友谊:
class OutSideClass
{
...
public:
int i_pub;
protected:
int i_pro;
private:
int i_pri;
class InSideClass
{
...
public:
int j_pub;
protected:
int j_pro;
private:
int j_pri;
};
};
Run Code Online (Sandbox Code Playgroud)
问题1> OutSideClass是否只能访问InSideClass的公共成员
问题2> InSideClass是否可以访问OutSideClass的所有成员
如果我的理解不正确,请纠正我.
此代码在msvc/g ++上编译:
class A{
protected:
int i;
class B{
public:
A* a;
B(A* a_)
:a(a_){
}
void doSomething(){
if (a)
a->i = 0;//<---- this part
}
};
public:
A()
:i(0){
}
};
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,B可以访问封闭类的"受保护"部分,尽管它未被声明为朋友.
这是标准(符合标准)的行为吗?
我有时使用此功能,但我不记得规则说嵌套的受保护类应该自动访问封闭类的所有受保护数据.