VisualC泛型编程实践.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Visual C++泛型编程实践   泛型程序设计(Generic Programming) 是建立在C++的Template机制基础上的一种完全不同于面向对象的程序设计思维模式,STL是泛型概念的一套实作产品。Loki是一个与Boost齐名的开放源码的C++程序库,它通过一些精巧的装置为常规C++开发提供了一些很有用的工具。STL非常好用,弹性非常大,效率也很理想。目前几种主流的C++编译器均有相关的STL实现,而个人认为目前非常流行的Visualc++ 6.0平台中开发文档应用程序时,其文档序列化的功能非常好用,但由于其序列化能力建立在MFC之上,并不被STL支持,所以,如何既拥有STL的效率及通用性,又保留MFC的序列化能力,便成了VisualC++ 6.0平台上运用STL技术开发文档应用程序时不得不面对的一个问题,在这里我就以非常流行的Visual C++ 6.0+SP5平台结合一个假定的例子来介绍一下如何在Visual C++6.0中结合使用STL、Loki及模板技术来开发一个文档应用的开发历程,希望能对大家有所启发。   示例    先来简单介绍一下我所用到的例子:一个简单的商务进销存基本应用(不必关注细节),它应该包含:职员(Employee)、产品(Product)、仓库(Storage)、往来单位(Supply)、帐户(Account)、单据(Bill)等等,由于每种信息均应有唯一标识,所以我在这里选用STL中的map来表示如下(为了说明简单起见,我们只列两种): std::map<size,Employee*> itsEmployees; //职员表 std::map<size,Product*> itsProducts; //产品表 ..   第一步:实现    我们将以上map放入多(单)文档应用程序的文档类中,很显然,我们必须对每一个表至少提供以下三种最基本的操作:添加新成员函数、删除指定成员函数、获取指定成员函数。    对于添加新成员,我们可以实现如下: size addAccountMember(Account* e); //添加帐户 {   //获取下一个可用的ID号   size id=getNextAccountID();   itsAccounts[id]=e;   returnid; } size addEmployeeMember(Employee* e);//添加职员 {   //获取下一个可用的ID号   size id=getNextEmployeeID();   itsEmployees[id]=e;   return id; } ..    接下来的删除方法仅有一个size(唯一标识)参数,实现如下: void delAccount(size ID); //删除指定帐户 { itsAccounts.erase(ID); } void delEmployee(size ID); //删除指定职员 { itsEmployees.erase(ID); } ..    获取指定成员的方法如下: Account* getAccountMember(size ID) //获取指定帐户 { return itsAccounts[ID]; } Employee* getEmployeeMember(size ID) //获取指定职员 { return itsEmployees[ID]; } ..    另外,我们还要为每一个表提供一个获取下一个可用ID的成员函数: //获取下一个可用职员号 Size getNextEmployeeID() {   if(itsEmployees.empty())    return 1;   std::map<size,Employee*>::iterator it=itsEmployees.end();   --it;   return it->first+1; } //获取下一个可用帐户号 Size getNextAccountID() {   if(itsAccounts.empty())   return 1;   std::map<size,Account*>::iterator it=itsAccounts.end();   --it;   return it->first+1; } ..   第二步:分析    以上实现的确达到了我们的设计目的,但仅从直观上来看我就觉得它应该还有改善的空间,最简单的原因:因为它的命名混乱,没有通用性,如: addAccountMember, addEmployeeMember,.. delAccount, d

文档评论(0)

orhchv6 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档