[英]why can't we declare object of a class inside the same class in C++ but it is allowed in Java?
class A
{
A a;//why can't we do this in C++ but it is allowed in Java?
};
使用這個問題 ,我開始知道為什么在C ++中不允許它,但為什么在java中允許它? 根據編譯時不知道內存大小的相同論點,它也不應該在Java中允許。
在Java中,如果你有A a;
, a
是對 A
類對象的引用 。 在C ++中,它不是一個引用,它是一個完整的對象。
因此,C ++中的結果對象將具有無限大小,這不是很實用。
在C ++中,您可以這樣做:
class A {
A *a;
}
這是您實現許多數據結構的方式,包括鏈表。
正如您所提到的,您無法在C ++中執行此操作:
class A {
A a;
}
你不能在C ++中做到這一點有幾個原因:不僅因為它不知道A
的內存大小(如你所提到的),而且因為它意味着每個A
都會有一個類型為A
的成員永遠地歸還。
所以,Java,允許相當於上面的第一個例子:
class A {
A a;
}
恰好這個語法 看起來與C ++語法的第二個例子相同,但事實上,它與第一個C ++示例具有相同的含義 :類A
具有類型為“pointer”(C ++)或“引用”的成員變量“(Java)到A
類的對象。
第二種C ++語法沒有等效的Java語法,因為在Java中,類的所有實例(即非基元)總是引用。
在Java中,這個
A a;
表示A是對A
對象的引用。 因此,類A
不包含A
實例,就像它在C ++中一樣(它將是無限遞歸的,因此是不允許的)。
A a;
用Java
創建引用但不用C++
創建引用。
在一個對象中具有相同對象的實例是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.