- 33
- 0
- 约2.05万字
- 约 17页
- 2016-04-05 发布于湖北
- 举报
第5章MFC集合类
许多C++程序员都使用标准模板库(STL),因为用它很容易实现数组、链接列表、映射 以及其他容器。STL语言中“容器”指的是保存数据集合的对象。但是在有STL之前,已经有MFC 了。在称为“MFC集合类”的一系列类中,MFC提供了自己的数组、链接列表以及映射的实现途径。虽然在MFC应用桎序中使用STL类非常安全,但许多MFC程序员还是更喜欢用MFC的集合类,一方面原因是他们更熟悉MFC,另一方面原因是不愿意链接两个独立的类库而增加应用程序的EXE的尺寸。
有MFC集合类的帮助,您根本不必从头编写一个链接列表。本章将介绍MFC集合类并深入说明它们的使用和操作。
5.1数组
C和C++的一个最大缺陷是数组不进行边界检查。看一下下面的代码,它反映了C和 C++应用程序中最常见的一种错误:
int array[10];
for (int i=0; i=10; i++)
array[i] = i + 1;
此代码出错是由于for循环中的最后一次迭代赋值超出了数组的范围。在运行时会产生非法存取错误。 ,
C++程序员经常通过编写数组类并在内部进行边界检查来解决此问题。下面给出的数组类具有Get和Set函数,用来检查传递给它们的下标,如果传递来的下标无效就进行断言处理:
class CArray
{
protected:
int m_nSize; // Number of elements in the array.
int* m_pData; // Where the arrays elements are stored.
public:
CArray (int nSize)
{
m_nSize = nSize;
m_pData = new int[nSize];
}
~CArray ()
{
m_nSize = 0;
if (m_pData != NULL) {
delete[] m_pData;
m_pData = NULL;
}
}
int Get (int nIndex)
{
assert (nIndex = 0 nIndex m_nSize);
return m_pData[nIndex];
}
void Set (int nIndex, int nVal)
{
assert (nIndex = 0 nIndex m_nSize);
m_pData[nIndex] = nVal;
}
};
用这个简单的类作为整型数组的容器,下列代码在最后一次调用Set时产生断言提示:
CArray array (10);
for (int i=0; i=10; i++)
array.Set (i, i + 1); // Asserts when i == 10.
这样就会避免非法存取错误的发生。
5.1.1 MFC数组类
您不必亲自编写数组类,MFC巳经提供了各种各样的数组。首先是一般的CArray类。 它实际上是一个模板类,利用它可以创建任何数据类项的类型安全数组。在头文件Afxlexn pl.h中定义了CArray。其次是非模板化的数组类,分别为保存特定类型的数据而设计。这些类在Afxcoll.h中定义。表5-1中列出了非模板化的MFC数组类以及它们所保伴的数据类型。
表5-1 恒定类型的MFC数组类
类名 数据类型 CByleArray 8位字节(BYTE) CWordArray 16位字节(WORD) CDWoKlArray 32位双字(DWORD) CUInl Array 无符号整型(UINT) CStringArray CString CPlrAmy void指针 CObArray CObject 指针
只要学会使用这些数组类中的一种,也就学会使用其他数组类,因为它们共享公用的一组成员函数。下例声明了一个包含10个UINT的数组并用数字1到10对它进行了初 始化:
CUIntArray array;
array.SetSize (10);
for (int i=0; i10; i++)
array[i] = i + 1;
可以采用相同的方法来声明一个CStrings数组并用整数I到10的文本表示来初始化它:
CStringArray array;
array.SetSize (10);
for (int i=0; i10; i++) {
您可能关注的文档
- 地下车库及坡道创优方案.doc
- 地下室剪力墙钢筋绑扎交底.doc
- 地线与表面电阻检测操作指导引.doc
- 地震报警器制作指南.doc
- 地震波速度资料解释.doc
- 地震折射信息的解释.doc
- 地质钻探各种通知书.doc
- 弟子规第六次课泛爱众等内容.ppt
- 第1章 双极型半导体器件.ppt
- 第4章_表面粗糙度及检测.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 我们仨电子版.pdf VIP
- 妇幼保健院十五五发展规划.docx VIP
- 小学生必背古诗75首(打印版).pdf VIP
- 期末重难点检测卷(含解析)-2026年数学三年级下册北师大版.pdf VIP
- ZXK-7532数控立式钻铣床主运动、进给系统及控制系统的设计.doc VIP
- 2025至2030中国碳纤维复合材料在航空航天领域应用现状及投资机会报告.docx
- 雅马哈psre313使用说明书.pdf VIP
- 临床成人患者医用粘胶相关性皮肤损伤预防及护理-MARSI.pptx
- 电力行业深度:算力之争,电力为王,聚焦美国AI能源革命核心赛道.pptx VIP
- 房地产上市公司偿债能力分析【文献综述】.docx VIP
原创力文档

文档评论(0)