Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套类显示成员值 A类 { 公众: B类 { 私人: int ii; }; void print(){cout_C++ - Fatal编程技术网

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(){cout
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(){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,我想你对面向对象有很多误解,朋友和私有并不是你唯一的误解。在这个阶段,我会忘记使用私有,忘记使用嵌套类,这只会让你的生活更加困难。公开一切。你仍然会犯错误这是因为你的其他误解,但至少你一次只需要弄清楚一件事。稍后,当你有其他的问题时,你可以回到私人、朋友和嵌套类的问题上来