2011-03-23 206 views
1

我有一個類分配的鏈表(讀:沒有使用STL),我需要創建對象的有序鏈表,但我不是很清楚如何去這樣做。創建對象

,我使用這個類同時包含整型和字符串成員,但它僅僅是將被分揀這些整數成員之一。我目前有一個功能齊全的鏈接列表模板,它將成功運行整數數據。

現在我的問題就出在這個轉換與我的班工作。在實例化這個鏈表時,必須定義一個<Type>,在這種情況下,該類型爲Poster,在我正在排序的類Poster之後。然而,在鏈表類的聲明,有class Node讀取

class Node 
{ 
public: 
    Type Element; 
    Node *Next, *Previous; 

    Node() : Next(NULL), Previous(NULL) {} // Default constructor 
    Node (Type Data, Node *PNode = NULL) : // Non-default constructor 
     Element (Data), 
     Next (PNode), 
     Previous (PNode) {} 
}; 

我不能確定引入的Poster的成員時,這個現有的定義將如何工作的聲明和定義時LinkedList<Poster> listOfPosters聲明。我是否應該將Node的上述定義替換爲class Poster的內容,或者將該節點中的Type Element標記爲class Poster成員的一種全接收容器,以便Poster的成員可以通過Element.GetMemberValue()訪問?

+0

提示:'類Node'需要是高達'LinkedList'是一個模板。 – Jon 2011-03-23 02:15:00

+0

看看你的老師可能涵蓋的模板課程。鏈表應該能夠處理任意的數據類型。 – AndyG 2011-03-23 02:15:11

回答

1

林猜測,LinkedList類的聲明看起來像

template<class Type> 
class LinkedList 
{ ... } 

當使用鏈表類(主程序)的程序實例化一個LinkedList類像下面

LinkedList<Poster> myLinkedList; 

編譯器在編譯時從模板生成代碼,並將所有出現的「類型」替換爲「海報」。因此,您不需要更改鏈接列表或節點類。

1

Node.Element構件將存儲Poster的(副值)拷貝。無需手動替換節點定義中的任何內容;這就是C++模板的重點。

當您聲明LinkedList<Poster>對象時,編譯器將生成一個新類並將Type佔位符的所有實例替換爲Poster。這將自動創建LinkedList<Poster>類,它表示其中保持Poster對象節點內的恰當Node類。