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

C++ nested classes, access fathers variables

本文关键字:访问 变量 嵌套 C++      更新时间:2023-10-16

标题已经说了很多,

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

我有一个名为 A 的类,在 a 中还有一个名为 B 的类,如下所示:

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

如您所见,我的目标是让 B 类能够访问 A 类,因为它是一个嵌套类。这不是行不通的,因为 B 无法访问 A,但它如何获得访问权限?

谢谢

尽管您在 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;
  }
}

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

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

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

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

选择

  • B必须是A的孩子,而不是被A所包含
  • B的构造函数引用创建它的A实例(首选)

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

C++嵌套类不像Java嵌套类,它们不属于A的实例,而是静态的。所以在这一点上不存在