{鏈表節點類}
TNode<E> = class(TObject)
private
FElement : E; //當前節點中的元素
FNext : TNode<E>; //當前節點的下一個節點
FPrevious : TNode<E>; //當前節點的上一個節點
published
property Element : E read FElement write FElement;
property Next : TNode<E> read FNext write FNext;
property Previous : TNode<E> read FPrevious write FPrevious;
public
constructor Create; overload;
constructor Create(Next : TNode<E>;Previous : TNode<E>);overload;
constructor Create(element : E;Next : TNode<E>;Previous : TNode<E>);overload;
destructor Destroy; override;
end;
我想寫一個雙向鏈表,這是節點類。
{ TNode<E> }
constructor TNode<E>.Create;
begin
inherited;
// 這里怎么寫? FElement := ??
FNext := nil;
FPrevious := nil;
end;
constructor TNode<E>.Create(element: E; Next, Previous: TNode<E>);
begin
FElement := element;
FNext := Next;
FPrevious := Previous;
end;
1.這兩個多載方法,下面那個 TNode<E>.Create 這兒會有下劃線紅色顯示,提示Overload procedure ‘’ must be marked with............但是編譯無錯也無警告的。
2.還有,第一個Create方法里FElement那里要怎么寫呢?null和nil有什么區別呢?
我知道java中這樣都賦為null就可以,delphi請教

private class Node<E>{
E element;
Node<E> next;
Node<E> previous;
public Node(E element, Node<E> next, Node<E> previous) {
super();
this.element = element;
this.next = next;
this.previous = previous;
}
}
uj5u.com熱心網友回復:
試試type
TNode<E:class> = class // 把 E 型別化
strict private // 題外話:最好加上關鍵字strict,strict可將私有成員類似c++友元特性無效,
// delphi中同個單元內的各個類的private成員實際都是友元的存在
....
constructor TNode<E>.Create;
begin
FElement := nil; // 就可以賦值nil
FNext := nil;
FPrevious := nil;
end;
你最好直接到generics.collections單元里找一個合適的鏈表類繼承就好了,例如TStack<T>就是一種泛型雙向鏈表。delphi的都有原始碼,看看generics.collections單元里的那些泛型容器都是怎么寫的就好了。
俺都好久沒有用d2009以上的版本了,泛型也不是必須的東西,沒啥機會弄大工程,也就沒法體會泛型對作業效率提高的好處,俺也就用得少都不太熟悉了。
另外delphi中俺只知道variants 單元里有個 Null函式,Null函式回傳一個null的variant,
關鍵字的null就不清楚了,貌似在d6開始null關鍵字就被廢棄了。
uj5u.com熱心網友回復:
嗯好多謝大神指點
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117386.html
標籤:語言基礎/算法/系統設計
上一篇:想在視窗中插入一個不規則的圖片作為開關,應該怎么弄?注意是不規則的。比如說圓形。
下一篇:你是個名副其實的專案經理嗎?
