這是翻閱《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用——C++語言描述》 以及在網(wǎng)上得到的一些資料后寫出來的。起因是在項(xiàng)目中要用到一個(gè)鏈表,但我做一個(gè)簡單的鏈表在C++中用的時(shí)候跟C差別很多,比如賦值運(yùn)算(編譯器說要做操作符重載,或者考貝構(gòu)造函數(shù),C++中把結(jié)構(gòu)當(dāng)成一個(gè)類來看了,詳見相關(guān)介紹的文檔或書籍)。后來一想干脆做個(gè)template順便學(xué)習(xí)一下,一舉兩得。
幾個(gè)問題:
CListData和CNode的函數(shù)均為內(nèi)聯(lián)函數(shù)(inline),因?yàn)槟壳暗木幾g器仍不支持分離編譯。按《Thinking in C++》一書第16章中的解釋是,模版類在定義的時(shí)候并沒有對(duì)內(nèi)存進(jìn)行分配置,而是到實(shí)例化的情況下才分配內(nèi)存,因此可以把聲明和定義都寫在頭文件(詳見原文)。
因此,如果將兩個(gè)文件分離則在連接時(shí)報(bào)錯(cuò)LNK2001。(這問題把我搞得痛苦了好一陣)
在網(wǎng)上及書上的例程中通常是以一個(gè)int做為例子,這使得在我們應(yīng)用的時(shí)候很不方便,特別是在不完全理解template的時(shí)候。在這里我以一個(gè)類(CNodeInfo)作一個(gè)節(jié)點(diǎn)類型的例子。
代碼:
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 為數(shù)大家可以理解成結(jié)構(gòu)中的元素如:
typedef struct _FILESTRUCT_
{
int count;
CString strFileName;
DWORD dwFIleLen
BOOL bStatus;
}FILESTRUCTURE.
(如果你想把它改得更通用可以把CString換成char 或者string,其他地方再作相應(yīng)修改,把BOOL 改成 bool或者用typedef一下)。
Public:是成員函數(shù)就不細(xì)描述了。比較簡單了。代碼中注釋比較詳細(xì),我在這就不寫得很細(xì)了,把一些我自己認(rèn)為不容易弄明白的地方寫一下就是了(希望有人能讀懂我的中式英文,嘿嘿)
參考資料:
《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用——C++語言描述》《Thinking in C++》以及網(wǎng)絡(luò)上相關(guān)資料。
幾個(gè)問題:
CListData和CNode的函數(shù)均為內(nèi)聯(lián)函數(shù)(inline),因?yàn)槟壳暗木幾g器仍不支持分離編譯。按《Thinking in C++》一書第16章中的解釋是,模版類在定義的時(shí)候并沒有對(duì)內(nèi)存進(jìn)行分配置,而是到實(shí)例化的情況下才分配內(nèi)存,因此可以把聲明和定義都寫在頭文件(詳見原文)。
因此,如果將兩個(gè)文件分離則在連接時(shí)報(bào)錯(cuò)LNK2001。(這問題把我搞得痛苦了好一陣)
在網(wǎng)上及書上的例程中通常是以一個(gè)int做為例子,這使得在我們應(yīng)用的時(shí)候很不方便,特別是在不完全理解template的時(shí)候。在這里我以一個(gè)類(CNodeInfo)作一個(gè)節(jié)點(diǎn)類型的例子。
代碼:
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 為數(shù)大家可以理解成結(jié)構(gòu)中的元素如:
typedef struct _FILESTRUCT_
{
int count;
CString strFileName;
DWORD dwFIleLen
BOOL bStatus;
}FILESTRUCTURE.
(如果你想把它改得更通用可以把CString換成char 或者string,其他地方再作相應(yīng)修改,把BOOL 改成 bool或者用typedef一下)。
Public:是成員函數(shù)就不細(xì)描述了。比較簡單了。代碼中注釋比較詳細(xì),我在這就不寫得很細(xì)了,把一些我自己認(rèn)為不容易弄明白的地方寫一下就是了(希望有人能讀懂我的中式英文,嘿嘿)
參考資料:
《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用——C++語言描述》《Thinking in C++》以及網(wǎng)絡(luò)上相關(guān)資料。

