论坛: 编程破解 标题: 一个简单的链表模版类的实现 复制本贴地址    
作者: TomyChen [quest]    版主   登录
一个简单的链表模版类的实现
例子程序下载:
点击下载
这是翻阅《数据结构、算法与应用――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++》以及网络上相关资料。



[此贴被 TomyChen(quest) 在 05月05日17时12分 编辑过]

地主 发表时间: 04-05-05 17:12

回复: xiean [xiean]   论坛用户   登录
我顶,我不能不顶,实在是好帖,建议加精华

[此贴被 邪安(xiean) 在 05月05日17时17分 编辑过]

B1层 发表时间: 04-05-05 17:15

回复: xiean [xiean]   论坛用户   登录
咱没人顶呢?没法,我再顶顶,不顶没糖吃。。。

B2层 发表时间: 04-05-06 12:42

回复: sniper167 [sniper167]   论坛用户   登录
收到命令,来了

B3层 发表时间: 04-05-06 15:12

回复: ziaichen [ziaichen]   论坛用户   登录
好东东
我顶!

B4层 发表时间: 04-05-06 19:03

回复: Garu [syshunter]   版主   登录
up.

B5层 发表时间: 04-07-27 13:39

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号