一個(gè)簡(jiǎn)單的鏈表模版類(lèi)的實(shí)現
作者:Smoke
源代碼下載
這是翻閱《數據結構、算法與應用——C++語(yǔ)言描述》 以及在網(wǎng)上得到的一些資料后寫(xiě)出來(lái)的。起因是在項目中要用到一個(gè)鏈表,但我做一個(gè)簡(jiǎn)單的鏈表在C++中用的時(shí)候跟C差別很多,比如賦值運算(編譯器說(shuō)要做操作符重載,或者考貝構造函數,C++中把結構當成一個(gè)類(lèi)來(lái)看了,詳見(jiàn)相關(guān)介紹的文檔或書(shū)籍)。后來(lái)一想干脆做個(gè)template順便學(xué)習一下,一舉兩得。
幾個(gè)問(wèn)題:
CListData和CNode的函數均為內聯(lián)函數(inline),因為目前的編譯器仍不支持分離編譯。按《Thinking in C++》一書(shū)第16章中的解釋是,模版類(lèi)在定義的時(shí)候并沒(méi)有對內存進(jìn)行分配置,而是到實(shí)例化的情況下才分配內存,因此可以把聲明和定義都寫(xiě)在頭文件(詳見(jiàn)原文)。
因此,如果將兩個(gè)文件分離則在連接時(shí)報錯LNK2001。(這問(wèn)題把我搞得痛苦了好一陣)
在網(wǎng)上及書(shū)上的例程中通常是以一個(gè)int做為例子,這使得在我們應用的時(shí)候很不方便,特別是在不完全理解template的時(shí)候。在這里我以一個(gè)類(lèi)(CNodeInfo)作一個(gè)節點(diǎn)類(lèi)型的例子。
代碼:
class CNodeInfo{private: int m_Count;//Counter or call it PKEY:) CString m_strFileName;//for Store filename DWORD m_dwFileLen;//for store file length BOOL m_bStatus;//Transfers status tag;public: CNodeInfo(); ~CNodeInfo(); void SetStatus(BOOL bStatus = FALSE); BOOL GetStatus(); void SetFileLen(DWORD len); DWORD GetFileLen(); void SetFileName(CString str); CString GetFileName();};//private 為數大家可以理解成結構中的元素如:typedef struct _FILESTRUCT_{ int count; CString strFileName; DWORD dwFIleLen BOOL bStatus;}FILESTRUCTURE.聯(lián)系客服