C ++嵌套类,访问父类变量

时间:2012-10-11 21:45:03

标签: c++ class nested parent

标题已经说了很多,

但基本上我想要做的是以下(示例):

我有一个名为A的类,另一个名为B的类,如下所示:

class A
{
   int a;

   class B
   {
      void test()
      {
         a = 20;
      }
   };
};

正如您所看到的,我的目标是让B类可以访问A类,因为它是一个嵌套类。不是这个不会工作,因为B无法访问A,但它如何才能访问?

谢谢

5 个答案:

答案 0 :(得分:10)

尽管您在A中声明了B类,但A类和B类仍然是完全独立的。唯一的区别是,现在要引用B,必须做A :: B。

要让B访问A的东西,你应该使用组合或继承。对于合成,给B引用A的对象,如下所示:

class B {
public:
  B(const A& aObj) : aRef(aObj) {
    cout << aRef.a << endl;
  }
private:
  const A& aRef;
};

对于继承,这样的事情:

class B: public A { // or private, depending on your desires
  B() {
    cout << a << endl;
  }
}

答案 1 :(得分:2)

内部类与C ++中的外部类没有关系,因为它在Java中。对于A::B访问A对象成员的实例,它需要在某处具有A的实例,就像B不是嵌套类一样。 A::B的实例没有A的任何隐式实例;您可以拥有许多A::B的实例,而不存在任何A个实例。

A的实例传递给test,然后使用它来访问a成员:

void test(A& a_instance)
{
  a_instance.a = 20;
}

答案 2 :(得分:1)

类是类型,类型没有数据。实例有数据,但A的实例(在您的示例中)不包含B的实例,B的实例不知道A的任何实例{1}}。

答案 3 :(得分:0)

选择

  • B成为A的孩子,而不是A所包含的
  • B的构造函数对创建它的A实例进行引用(首选)

现在,如果变量a是私有的,那么这仍然无济于事。您将需要访问者或朋友关系。

答案 4 :(得分:-1)

C ++嵌套类与java嵌套类不同,它们不属于A的实例,但是是静态的。那时a不存在