嵌套类显示成员值

Nested class display member value

本文关键字:成员 显示 嵌套      更新时间:2023-10-16
class A
{
   public:
   class B
   {
       private:
         int ii;
   };
   void print(){cout<<B::ii<<endl;}
};

我的编译器说我不能访问ii中的整数;我搜索了这个网站,并提出了朋友的关键我把它改成

class A
{
   public:
   class B
   {
       private:
         int ii;
   };
   friend void print(){cout<<B::ii<<endl;}
};

但它也不起作用。你能帮我吗?我被卡住了。真的真的真的伤心如无路可走!

A包含B。但这并不意味着A可以访问B的私处。只有当BA成为朋友时,它才能这样做。

class A
{
   public:
   class B
   {
       private:
         int ii;
         friend class A;
   };
   void print(){cout<<B::ii<<endl;}
};

同时,iiB的非静态成员。你不能用B::语法访问它;您需要一个类型为B的实例。

类A对类B的成员没有特殊的访问权限,必须尊重类ii的私有属性。您可以通过为类B创建set/get函数或将A设置为B的友类来访问ii。您还需要一个B类型的实际对象。

class A
{
   public:
   class B
   {
       private:
         int ii;
         friend class A;
   };
   B m_B;
   void print(){cout<<m_B.ii<<endl;}
};

标准文本对此非常清楚:

c++标准(2003)在$11.8/1 [class.access.nest]中说,

嵌套类的成员对类的成员没有特殊访问权限类,也不能赋值给已赋值的类或函数友谊是一个封闭的阶级;通常的存取规则(第11条)都要遵守。封闭类的成员没有特殊的对嵌套类成员的访问;通常的访问规则(子句)

现在,关于你问题中的第二种情况,print()函数是A的朋友,也就是说,它只能访问A的私有成员,而不能访问B的私有成员,因为print()函数不是B的朋友。把print()变成A的朋友并不会自动把它变成Bfriend

顺便说一下,标准报价单有一个缺陷。它表示嵌套类不能访问封闭类的私有成员。但是在c++ 0x中,它被纠正了:在c++ 0x中,嵌套类确实可以访问封闭类的私有成员(尽管封闭类仍然不能访问嵌套类的私有成员)。

查看此缺陷报告:

  • 45岁。访问嵌套类

有点相关的话题:

  • 内部类在c++中自动是友类吗?