日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类中定义自身类的对象

發(fā)布時間:2024/4/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类中定义自身类的对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在C++的類定義中,是不能夠在類中定義自身類的對象的,但是可以定義自身類的指針對象和引用。

class A
{
public:
?A ()
?{
??cout<<"Constructor method."<<endl;
?};
?A a;
};

?

void main()
{
?A aaaaa;
}

以上代碼編譯提示錯誤,a' : uses 'A',which is being defined。

如果把a換成*a就可以了。

?

而java就可以在類中定義自身類的對象。

class a{
??public a aa;
?}

?

這樣的代碼可以順利編譯,但是如果在定義的時候創(chuàng)建了對象實例,則也會編譯失敗的。

class a{
??public a aa = new a();
?}

提示錯誤:

Exception in thread "main"java.lang.StackOverflowError
?at test1$abc.<init>(test1.java:4)

很明顯,堆棧溢出了。

為什么呢?其實以上問題的本質是一致的,就是是創(chuàng)建對象實例的時機問題。

在C++中,在定義對象的時候就創(chuàng)建了對象的實例,即分配了對象的內存空間。在java中,只有調用new的方法才能創(chuàng)建對象的實例,在內存中分配對象的空間。所以,如果在定義的時候就定義自身類的對象,就會導致遞歸創(chuàng)建對象的現(xiàn)象,創(chuàng)建了對象aa,因為aa是一個A類的實例,那么aa中還有一個aa對象,還要創(chuàng)建一個aa對象,為其分配內存…………,這樣就會導致遞歸創(chuàng)建對象,結果就是內存被消耗殆盡。當然,這樣的設計本身也不合理。

在JAVA中,對象只有在new時才能創(chuàng)建對象實例,所以類中可以定義自身類的對象。如果把上例修改成令一個類的實例,則不會有任何問題。

class a{
??public?b?bb = new b();
?}

這樣的代碼是可以編譯并運行的。

但如果在java的類中用new創(chuàng)建自身的對象時,將其聲明為static則是可以的。這是因為static成員只在類的對象被創(chuàng)建或類的靜態(tài)成員(方法)被調用時進行一次初始化,其后即再不創(chuàng)建和初始化。

總結

以上是生活随笔為你收集整理的类中定义自身类的对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。