当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 一个简单的链表模版类的实现

VC++
VC++ 的常用编程技巧
VC++编译环境详解
Visual C++制作一个Sniffer实例
vc.net中实现启动画面来个淡入淡出效果
VC++中进程间相互通信的十一种方法
深入了解VC++编译器
VC++删除浮动工具条中“关闭”按钮
VISUAL C++中的OCX控件的使用方法
VC++:用VC++实现上网拨号功能
VC++:基于VC++中ATL创建ActiveX控件的探讨
VC++删除浮动工具条中“关闭”按钮
VC++:VC++中的面向对象和Windows编程
VC++:Vc++中线程的同步
VC++:更新命令用户接口(UI)消息
VC++:CDatabase类的那些事
VC++:小编谈VC++中 CDatabase类的那些事
VC++:小编泛谈MFC的ODBC类
VC++:小编分享线程的创建和终止
在VC资源文件中加入声音资源
C++的static关键字

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 52 ::
收藏到网摘: n/a

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


作者:Smoke


源代码下载

    这是翻阅《数据结构、算法与应用——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++》以及网络上相关资料。