快捷搜索:

一个简单的链表模版类的实现

本文示例源代码或素材下载

这是翻阅《数据布局、算法与利用——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++》以及收集上相关资料。

您可能还会对下面的文章感兴趣: