簡體   English   中英

為什么我們不能在C ++中的同一個類中聲明一個類的對象但是在Java中是允許的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM