標題已經說了很多,C++嵌套類,接入父親變量
但基本上我想要做的是以下(例):
我有一個稱爲A類和其他類中一個叫B,就像這樣:
class A
{
int a;
class B
{
void test()
{
a = 20;
}
};
};
正如你可以看到我的目標是爲B類有機會獲得A級,因爲它是一個嵌套類。不是這樣做不行,因爲B無法訪問A,但它如何訪問?
謝謝
標題已經說了很多,C++嵌套類,接入父親變量
但基本上我想要做的是以下(例):
我有一個稱爲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,一個參照的對象,像這樣:
class B {
public:
B(const A& aObj) : aRef(aObj) {
cout << aRef.a << endl;
}
private:
const A& aRef;
};
繼承,像這樣:
C++嵌套類並不像Java嵌套類,它們不屬於A的實例,但都是靜態的。所以在這一點上不存在
內部類與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
的構造函數需要引用o創建它的A
實例(首選)現在,如果變量a
是私人的,這仍然不會有幫助。您將需要訪問者或朋友關係。
只是爲了澄清,B將不再嵌套在上面的示例中。否則,類型B的對象將包含類型A的對象,其將包含類型B的對象... – mythagel
您的B類代碼(第一個塊)對我來說沒有任何意義...構造函數的括號。 –
@MiguelP,對不起,我修正了它。 – Philip