Ctypedptrlist模板类使用心得.doc

Ctypedptrlist模板类使用心得.doc

ID:51671564

大小:32.50 KB

页数:8页

时间:2020-03-14

Ctypedptrlist模板类使用心得.doc_第1页
Ctypedptrlist模板类使用心得.doc_第2页
Ctypedptrlist模板类使用心得.doc_第3页
Ctypedptrlist模板类使用心得.doc_第4页
Ctypedptrlist模板类使用心得.doc_第5页
资源描述:

《Ctypedptrlist模板类使用心得.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Ctypedptrlist模板类使用心得CtypedPtrListm_CirList;CtypedPtrList是一个链表模板类,里面有一些操作方法,如GetNext()、GetAt()等操作。参数1:第一个参数说明是列表的基类,这里必须是个指针列表类(Coblist或者CPtrlist,自己觉得用其他的列表类也可以,只要是指针列表类)PS:CObList是继承了Cobject,所以,拥有Serialize()序列化的操作。参数2:第二个参数指在列表类中所存放的类

2、型(可以是自定义类的指针)成员函数:1.GetHeadPosition()这个是用来获取链表头的方法;返回值类型:POSITION例1:POSITIONpos=pDoc->m_CirList.GetHeadPosition();这里的pos是用来记录链表头的位置。2.GetNext(POSITIONpos);用来获取下一个链表的位置。返回值类型:与模板类里的参数2的类型一致。例2:while(pos!=NULL){Circle*cir=pDoc->m_CirList.GetNext(pos);}例

3、2的作用,主要是遍历整个链表,从而对链表里的元素进行操作。因GetNext()返回值类型与链表里元素的类型一致,故在此用Circle*类型的对象cir来对该链表中的元素进行操作。在例1中提到,pos的作用是为了记录位置。所以,while(pos!=NULL)的pos是用来判断pos是不是为空(亦可以理解为是否该链表没有元素,或者已遍历到了尾部。)如果pos不为空,则进入循环体,进行GetNext(pos)方法的操作。:Circle*cir=pDoc->m_CirList.GetNext(pos);

4、这个是把链表里当前位置(也就是pos)的元素赋给cir,然后pos的值变为下一个。如while(pos!=NULL)里的pos已为链表尾部,则该值将变为Cx000000(也就是0),则跳出该循环。如不为链表的尾部,则pos的值将变为下一个位置。注:GetPrev()的用法与GetNext()用法一致,区别是从头到尾和从尾到头。3.GetAt(pos)用来获取当前位置里面的元素。返回值类型:与模板类里的参数2的类型一致。例3:Circle*Ncir=pDoc->m_CirList.GetAt(pos

5、);GetAt()的作用与GetNext()的作用类似,把链表里当前位置(也就是pos)的元素赋给Ncir,注意:此时参数pos的值不变,也就是GetAt()与GetNext()的差别。4.GetHead()返回列表(不能为空)的头元素。返回值类型:与模板类里的参数2的类型一致。例4.Circle*cir=m_CirList.GetHead();前提:m_CirList里必须得有元素。因较为简单,固不多做解释。注:GetTail()的用法与GetHead()基本一致。返回列表(不能为空)的尾元素。

6、返回值类型:与模板类里的参数2的类型一致。5.GetCount返回该列表中的元素数目返回值类型:整形(笔者认为)例5.1wsprintf(str,"%d",m_CirList.GetCount());pDC->TextOutA(20,100,str);IsEmpty测试列表是否为空(无元素)返回值类型:bool(笔者认为)例5.2if(m_CirList.IsEmpty()){return0;}多用于判断PS:还有一些成员函数,等待笔者去验证。未完待续~!关于大作业的心得1.关于序列化为了解决应用

7、程序中含有动态对象的序列化问题,必须在自己类里面重载Serialize函数,并且加上宏的序列化声明DECLARE_SERIAL()以及类的序列化实现宏IMPLEMENT_SERIAL()。需要特别关注的是,类中必须有个一个无参的构造函数,并且继承Cobject,以及头文件”afxtempl.h”。2.关于向量笔者做过试验,曾用向量做过,但是不知道什么原因导致序列化失败,最终以失败告终,笔者会进一步研究出序列化的内幕,以实现向量的序列化。3.关于错误更多的错误源于对CtypedPtrList模板类里

8、面的成员函数的使用。如在处理OnLButtonDown消息时,Circle*cir=pDoc->m_CirList.GetNext(pos);pDoc->pCir=pDoc->m_CirList.GetAt(pos);笔者曾这么用过,忽略了在GetNext(pos)之后pos将变成下一个位置,而在后面又使用了GetAt(pos)方法(其实经过GetNext(pos)之后,pos的值已经变了,并且pos是否存在是未知的),导致一些不必要的麻烦。voidCMFCView::OnLBut

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。