标题已经说了很多,
但基本上我想做的是以下(示例):
我有一个名为 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::B
要访问对象成员的A
实例,它需要在A
某个地方有一个实例,就像B
不是嵌套类一样。的实例A::B
没有A
;的任何隐式实例 你可以有很多A::B
没有任何实例A
存在的实例。
A
传递to的实例test
,然后使用它来访问a
成员:
void test(A& a_instance)
{
a_instance.a = 20;
}
类是类型,类型没有数据。实例有数据,但 的实例A
(在您的示例中)不包含 的实例B
,并且 的实例B
不知道 的任何实例A
。
选择
B
一个孩子A
而不是包含在A
B
的构造函数对A
创建它的实例进行引用(首选)现在,如果变量a
是私有的,这仍然无济于事。您将需要访问者 a 或朋友关系。
C++ 嵌套类不像 java 嵌套类,它们不属于 A 的实例,而是静态的。所以 a 那时不存在