1樓:
你建立了乙個類,就建立了乙個型別。
public entry next 看不懂,public Integer next 能看懂吧?
乙個道理。
2樓:南蔥
遞迴型別並不是乙個很基礎的概念,乙個型別之所以能成為它自己的組成部分,乙個很重要的前提就是遞迴型別展開是可以終止的,換句話說就是該型別的例項可以為空值(這個對於初學者來說是需要花時間理解的)。鍊錶實質上是一種典型的Monoid。
看Haskell風格的鍊錶定義:
Data List a = Empty | Cons a (List a)
用人類的語言描述就是:
「定義型別——鍊錶:乙個鍊錶要麼為'空值',要麼為乙個單值和乙個鍊錶的組合。」
如果定義不採用空值的話,那麼所有的鍊錶都只能是環(題主的型別定義其實是可以用來構造乙個環的)。
之所以在C#裡面可以這樣宣告乙個Entry型別,是因為C#預設:
1. 所有的class的例項資料都是通過指標來引用的;
2. 乙個指標占用的記憶體大小是常數;
3. 空指標(空值引用)可以作為任何乙個類的例項;
4. 編譯器可以直接確定某個類的例項所占用的記憶體大小,當Entry型別有乙個Entry型別的屬性時,編譯器知道在每個Entry的例項中需要保留乙個字段,用於引用另乙個Entry型別的示例(或引用乙個空值)。
相對比之下,在C語言裡面的結構體是值型別,某結構體的同自己型別的屬性只能是結構體指標型別,而不能是結構體型別。像如下的宣告是不可以的(但是這種語義其實是成立的),因為結構體例項占用的記憶體大小無法由編譯器確定:
struct
entry
;必須把星號加上:
struct
entry
;以上。
這個問題會困擾一些缺乏指導的初學者。題主真要理解這個問題,不僅要學點資料結構(包括指標)的基礎,還是得看一些編譯原理方面的內容。
3樓:
next是類entry的成員變數,型別是entry。或者說類entry有乙個自身型別的成員變數next。
作用嘛:構建鍊錶。
Java中的類和c 中的類,在使用中要理解?
Lieu 長文慎入,內含 星際 穿越 我覺得這是乙個程式語言設計的問題,也是個空間緯度的問題.很有意思.還沒接受過科班的CS的訓練,程式設計經驗僅限J2EE的前後端,拋磚引玉,談談自己的思考.二維世界 我認為程式語言的基本元素是操作符和變數,而通過操作符操作變數這一行為即乙個語句.比如有變數a,有操...
C 中為什麼要有allocator類?
Wu Jarvis 我是這麼理解的 其實你只要分清vector中resize,reserve的關係就能明白了,resize時,當元素數量 capacity時不但會分配空間,而且會初始化元素 reserve只會做分配空間的事情,不會做初始化,這樣就把分配空間和初始化的事情分開來了,如果不分開的話,那麼...
C 中類的資料成員(data member)能出現未初始化(uninitialized)的狀態嗎?
1.如果在乙個函式類定義,那麼在這兩個類裡的資料成員都未初始化,都是不確定的值。如果是在全域性空間定義,那built in type就是預設值,類就是預設構造的。你可以自己列印出來看看 2.是不是 class type 在進行預設初始化的時候遞迴呼叫父類的建構函式,而且類中的資料成員也按照規則進行初...