C++ 嵌套类显示成员值 A类 { 公众: B类 { 私人: int ii; }; void print(){cout
C++ 嵌套类显示成员值 A类 { 公众: B类 { 私人: int ii; }; void print(){cout,c++,C++,A包含B。但这并不意味着A可以访问B的隐私。只有当B成为A的朋友时,它才能这样做 class A { public: class B { private: int ii; }; friend void print(){cout<<B::ii<<endl;} }; A类 { 公众: B类 { 私人: int ii; A级朋友; }; void print(){coutA包含B。但这并不意味着A可以访问B的隐私
A
包含B
。但这并不意味着A
可以访问B
的隐私。只有当B
成为A
的朋友时,它才能这样做
class A
{
public:
class B
{
private:
int ii;
};
friend void print(){cout<<B::ii<<endl;}
};
A类
{
公众:
B类
{
私人:
int ii;
A级朋友;
};
void print(){coutA
包含B
。但这并不意味着A
可以访问B
的隐私。只有当B
成为A
的朋友时,它才能这样做
class A
{
public:
class B
{
private:
int ii;
};
friend void print(){cout<<B::ii<<endl;}
};
A类
{
公众:
B类
{
私人:
int ii;
A级朋友;
};
void print(){cout类A对类B的成员没有特殊的访问特权,必须尊重ii的私有属性。您可以通过为类B创建set/get函数或与B交朋友来访问ii。您还需要类型B的实际对象
class A
{
public:
class B
{
private:
int ii;
friend class A;
};
void print(){cout<<B::ii<<endl;}
};
A类
{
公众:
B类
{
私人:
int ii;
A级朋友;
};
B m_B;
void print(){cout类A对类B的成员没有特殊的访问特权,必须尊重ii的私有属性。您可以通过为类B创建set/get函数或与B交朋友来访问ii。您还需要类型B的实际对象
class A
{
public:
class B
{
private:
int ii;
friend class A;
};
void print(){cout<<B::ii<<endl;}
};
A类
{
公众:
B类
{
私人:
int ii;
A级朋友;
};
B m_B;
void print(){cout标准文本对此非常清楚:
C++标准(2003)在$118/1[类.Access .Nest ]中表示,
嵌套类的成员对
封闭类,也不适用于已授予
与封闭类的友谊;通常的访问规则(第11条)
应遵守。封闭类的成员没有特殊的
对嵌套类成员的访问;通常的访问规则(子句
11) 必须遵守。
现在,关于您问题中的第二种情况,print()
函数是a
的朋友,也就是说,它只能访问a
的私有成员,而不能访问B
,因为print()
函数不是B
的朋友A的朋友
不会自动成为B的朋友
还有
顺便说一句,标准引号有一个缺陷。它说嵌套类无权访问封闭类的私有成员。但在C++0x中,它已被更正:在C++0x中,嵌套类确实可以访问封闭类的私有成员(尽管封闭类仍然无法访问嵌套类的私有成员)
请参阅此缺陷报告:
有些相关的话题:
标准文本对此非常清楚:
C++标准(2003)在$118/1[类.Access .Nest ]中表示,
嵌套类的成员对
封闭类,也不适用于已授予
与封闭类的友谊;通常的访问规则(第11条)
应遵守。封闭类的成员没有特殊的
对嵌套类成员的访问;通常的访问规则(子句
11) 必须遵守。
现在,关于您问题中的第二种情况,
print()
函数是a
的朋友,也就是说,它只能访问a
的私有成员,而不能访问B
,因为print()
函数不是B
的朋友A的朋友
不会自动成为B的朋友
还有
顺便说一句,标准引号有一个缺陷。它说嵌套类无权访问封闭类的私有成员。但在C++0x中,它已被更正:在C++0x中,嵌套类确实可以访问封闭类的私有成员(尽管封闭类仍然无法访问嵌套类的私有成员)
请参阅此缺陷报告:
有些相关的话题:
你能给我写你的代码吗?你的话太多太多了,我听不懂,,,非常感谢你知道为什么在嵌套类中更喜欢使用friend吗?不是。这只是一种覆盖特定实例的类封装的方法。通常,这意味着你在设计时没有很好地考虑问题,是吗gh有非常特殊的例外情况。你能给我写你的代码吗?你的话太高太大了,我不能很好地理解,,,,非常感谢你知道为什么在嵌套类中更喜欢使用friend吗?不是。这只是一种覆盖特定实例的类封装的方法。通常,这意味着你没有仔细考虑问题你的设计很好,但也有一些非常特殊的例外。谢谢,你的回答与Nicol Bolas没有区别。谢谢anyway@ILuvMoney它是不同的。它有一个名为m_B的成员变量,类型为B。哦,对不起,我没有看到它。你知道为什么在嵌套类中更喜欢使用friend。我读了一篇关于站点firend的帖子,它告诉我是这样的。是吗它欺骗了我?我是confusse@ILuvMoney,我想你对面向对象有很多误解,朋友和私有并不是你唯一的误解。在这个阶段,我会忘记使用私有,忘记使用嵌套类,这只会让你的生活更加困难。公开一切。你仍然会犯错误这是因为你的其他误解,但至少你一次只需要弄清楚一件事。稍后,当你有其他的问题时,你可以回到私人、朋友和嵌套类的问题上来