如何访问成员变量?

时间:2016-05-17 19:29:23

标签: c++ oop

我有一个看起来像这样的函数:

void myClass::memberStruct::memberFunction() {
         // code
}

然后我在myClass中有一个(受保护的)数组,我希望在此函数中访问(不是静态数组)。我如何访问此阵列?我无法使用this,因为它为我提供了指向memberStruct的指针。

2 个答案:

答案 0 :(得分:1)

您不能,因为structclass无关,即使您在struct中定义class也是如此。

声明struct中的class只会将其范围限制在课堂上,而不是其他任何内容。所以不,你无法访问数组。

然而,您可以将数组传递给memberFunction,例如。

答案 1 :(得分:1)

访问权限不是问题。嵌套类与该类的任何其他成员具有相同的访问权限。

问题是您没有myClass的对象。没有它,你就无法访问该类的任何成员。

来自C ++ 11标准:

  

11.7嵌套类 [class.access.nest]

     

1嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊访问权限;通常的访问规则(第11条)   应遵守。 [示例:

class E {
    int x;
    class B { };

    class I {
      B b; // OK: E::I can access E::B
      int y;
      void f(E* p, int i) {
        p->x = i; // OK: E::I can access E::x
      }
   };

 int g(I* p) {
     return p->y; // error: I::y is private
   }
 };
     

- 结束示例]

以下程序适用于我使用g ++ 4.9.3。

#include <iostream>

class myClass
{
   public:

      myClass(int in) : var1(in) {}

      struct memberStruct
      {
         int foo(myClass& obj);
      };

   protected:

      int var1;
};

int myClass::memberStruct::foo(myClass& obj)
{
   return obj.var1;
}

int main()
{
   myClass obj1{10};
   myClass::memberStruct obj2;
   std::cout << obj2.foo(obj1) << std::endl;
}