8

标题已经说了很多,

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

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

class A
{
   int a;

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

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

谢谢你

4

5 回答 5

12

尽管您在 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;
  }
}
于 2012-10-11T21:49:54.053 回答
2

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

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

void test(A& a_instance)
{
  a_instance.a = 20;
}
于 2012-10-11T21:49:31.027 回答
1

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

于 2012-10-11T21:49:44.287 回答
0

选择

  • B一个孩子A而不是包含在A
  • haveB的构造函数对A创建它的实例进行引用(首选)

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

于 2012-10-11T21:51:24.600 回答
-1

C++ 嵌套类不像 java 嵌套类,它们不属于 A 的实例,而是静态的。所以 a 那时不存在

于 2012-10-11T21:49:22.027 回答