给出以下代码而不考虑两个类之间的友谊:
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的所有成员
如果我的理解不正确,请纠正我.
Naw*_*waz 31
问题1> OutSideClass是否只能访问InSideClass的公共成员
是
问题2> InSideClass是否可以访问OutSideClass的所有成员
不,在C++ 03中.是的,在C++ 11中.
标准文本对此非常清楚:
C++标准(2003)以11.8美元/ 1 [class.access.nest]的形式说,
嵌套类的成员对封闭类的成员没有特殊访问权限,也没有对已经为封闭类授予友谊的类或函数的特殊访问权限.应遵守通常的准入规则(第11条).封闭类的成员对嵌套类的成员没有特殊访问权限; 应遵守通常的准入规则(第11条).
但是,标准报价有一个缺陷.它说嵌套类无法访问封闭类的私有成员.但在C++ 11,已经更正:在C++ 11,嵌套类确实有访问外围类的私有成员(虽然外围类仍然没有访问嵌套类的私有成员).
查看此缺陷报告: