标题已经说了很多,
但基本上我想要做的是以下(示例):
我有一个名为A的类,另一个名为B的类,如下所示:
class A
{
int a;
class B
{
void test()
{
a = 20;
}
};
};
正如您所看到的,我的目标是让B类可以访问A类,因为它是一个嵌套类。不是这个不会工作,因为B无法访问A,但它如何才能访问?
谢谢
答案 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不存在