程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 一個簡單的鏈表模版類的實現

一個簡單的鏈表模版類的實現

編輯:關於C++

這是翻閱《數據結構、算法與應用——C++語言描述》 以及在網上得到的一些資料後寫出來的。起因是在項目中要用到一個鏈表,但我做一個簡單的鏈表在C++中用的時候跟C差別很多,比如賦值運算(編譯器說要做操作符重載,或者考貝構造函數,C++中把結構當成一個類來看了,詳見相關介紹的文檔或書籍)。後來一想干脆做個template順便學習一下,一舉兩得。

幾個問題:

CListData和CNode的函數均為內聯函數(inline),因為目前的編譯器仍不支持分離編譯。按《Thinking in C++》一書第16章中的解釋是,模版類在定義的時候並沒有對內存進行分配置,而是到實例化的情況下才分配內存,因此可以把聲明和定義都寫在頭文件(詳見原文)。

因此,如果將兩個文件分離則在連接時報錯LNK2001。(這問題把我搞得痛苦了好一陣)

在網上及書上的例程中通常是以一個int做為例子,這使得在我們應用的時候很不方便,特別是在不完全理解template的時候。在這裡我以一個類(CNodeInfo)作一個節點類型的例子。

代碼:

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.

(如果你想把它改得更通用可以把CString換成char 或者string,其他地方再作相應修改,把BOOL 改成 bool或者用typedef一下)。

Public:是成員函數就不細描述了。比較簡單了。代碼中注釋比較詳細,我在這就不寫得很細了,把一些我自己認為不容易弄明白的地方寫一下就是了(希望有人能讀懂我的中式英文,嘿嘿)

參考資料:

《數據結構、算法與應用——C++語言描述》《Thinking in C++》以及網絡上相關資料。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved