C 中的類 class entry public entry next 這裡的entry與next有什麼關係?entry怎麼能修飾next呢?

時間 2021-06-03 07:54:26

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 在進行預設初始化的時候遞迴呼叫父類的建構函式,而且類中的資料成員也按照規則進行初...