的集合类中生成类型安全的集合类。
MFC提供的新的基于模板的集合类对于数组、列表和映射的实现如表
8。3所示。
…………………………………………………………Page 445……………………………………………………………
表8。3 基于模板的MFC集合类
集合内 数组 列表 映射
容
任意类 CArray Clist CMap
型的对
象
指向任 CTypedPtrArray CTypedPtrList CTypedPtrMap
意对象
的指针
表8。4所示的不基于模板的MFC集合类仍可以使用。
您可以根据上面所给的特点来为您的应用程序选定的合适的集合类。
下面我们将举例来说明各个集合类的基本使用方法。
表8。 4 非模板集合类
数组 列表 映射
CObArray CObList CMapPtrToWord
CByteArray CPtrList CMapPtrToPtr
CDWordArray CStringList CMapStringToOb
CPtrArray CMapStringToPtr
CStringArray CMapStringToString
CWordArray CMapWordToOb
CUIntArray CMapWordToPtr
(1) 使用CArray模板创建数组集合
正如同前面所说,很多时候我们使用集合类来保存文档中的数据。在
下面的例子中,我们在文档中使用集合类来创建一个功能非常简单的
文本文件查看程序。这个实用程序的功能还很单一,这里我们仅是用
它来作为说明集合类的使用的示例。
首先我们需要为这个示例创建一个MDI工程,可以使用AppWizard来完
成很多模式化的东西,这里我们假定读者已经对如何使用AppWizard
创建起始工程非常地熟悉,所以不再重复的讲述这个过程。如果您需
…………………………………………………………Page 446……………………………………………………………
要帮助的话,可以看一看 “8。2使用AppWizard创建框架应用程序”
和 “8。3生成文档” 中的示例。在下面的讲述中,我们假定您所创
建的工程名为TextViewer,相应的文档类和视类为CTextDoc和
CTextView。
刚开始的时候我们考虑使用CArray模板来创建该应用程序,这也是最
直观的想法。
要在程序中使用MFC模板类,需要添加头文件afxtempl。h,由于在整
个过程中我们都 没有必要去修改这个头文件 (并且,我们也不建议您
去修改这个头文件),所以我们可以把它添加工程TextViewer的预编
译头文件StdAfx。h中。这样做还可以获得额外的好处,就是没有必要
对每一个包含了StdAfx。h头文件的源文件都添加
#include
一行。由于由AppWizard和ClassWizard生成的文件大多添加了下面的
代码:
#include
因此,我们就可以避免为每一个需要使用模板的源文件都手动的添加
对afxtempl。h的包含。
完成这一步之后,在CTextDoc的定义中添加下面的代码:
public:
CArray m_text;
从CArray模板生成指定类型的元素的数组的语法为
CArray myArray;
其中使用到了两个参数,第一个参数TYPE为数组类所存储的元素类
型,可以指定的元素类型包括:基本C++数据类型、C++结构和类以及
其它的用户自定义类型。第二个参数指定在函数参数传递中的使用的
数据类型,对于结构和类类型的元素,我们一般都将ARG_TYPE参数设
置为对TYPE参数指定的数据的引用,如上面的例子。把函数参数指定
为对数据的引用可以生成更有效的代码,这对于在集合类中使用大的
类对象非常有意义。
在本示例中使用向集合类中添加元素是在文档的串行化时进行的。按
下面的代码重载类CTextDoc的Serialize成员函数:
…………………………………………………………Page 447……………………………………………………………
/////////////////////////////////////////////////////////////
// CTextDoc 串行化
void CTextDoc::Serialize(CArchive& ar)
{
CString str;
if (ar。IsStoring())
{
for (int i=0; i”
运算符将得不到正确的结果;出于同样的原因,如果是使用 “
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章