C++中级培训课件_第1页
C++中级培训课件_第2页
C++中级培训课件_第3页
C++中级培训课件_第4页
C++中级培训课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

王慧清C++中级培训—实践篇课程内容2平安规那么编程常用技能程序如何设计平安规那么3内存释放防止内存越界变量初始化内存释放4防止引用已经释放的内存空间;在实际编程过程中,稍不留心就会出现在一个模块中释放了某个内存块〔如C语言指针〕,而另一模块在随后的某个时刻又使用了它。要防止这种情况发生过程/函数中分配的内存,在过程/函数退出之前要释放;过程/函数中申请的〔为翻开文件而使用的〕文件句柄,在过程/函数退出之前要关闭;内存操作主要是指对数组、指针、内存地址等的操作。内存操作越界是软件系统主要错误之一,后果往往非常严重,所以当我们进行这些操作时一定要仔细小心。charstr[100];memset(str,0,128); //忘记了此数组的长度,不小心造成了越界memset(str,0,sizeof(str)); //这样是平安的。izeof(str));//这样是平安的防止内存越界5Studentstu;memset(&stu,0,sizeof(Teachar)); //由于复制粘贴后忘记修改结构体变量,造成了越界memset(&stu,0,sizeof(Student)); //这样是正确的。系统运行之初要初始化有关变量,防止未经初始化的变量被引用未经初始化指针引起系统崩溃使用未经初始化变量赋值造成脏数据Student*p;Sprintf(p->name,“Jeep”);izeof(str));//这样是平安的变量初始化6Studentstu;longlScore=stu.englishScore; //错误。使用未初始化数据造成脏数据memset(&stu,0,sizeof(Student));longlScore=stu.englishScore; //正确。memset后再使用#ifndefexternqsortSTL算法应用-sort模板函数模板类编程常用技能7#ifndefx#definex...#endif条件指示符#ifndef是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,最主要目的是防止头文件的重复包含和编译。#ifndefx//先测试x是否被定义过#definex//如果没有定义下面就定义x并执行下面的语句...#endif//如果已经定义了那么执行#endif后面的语句#ifndef8extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。〔个人习惯,建议使用〕Extern用于进行链接指定。C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言那么不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern“C”进行链接指定。//在.h文件的头上#ifdef__cplusplus#if__cplusplusextern"C"{#endif#endif/*__cplusplus*/…extern9//.h文件结束的地方#ifdef__cplusplus#if__cplusplus}#endif#endif/*__cplusplus*/函数原型:voidqsort(void*base,size_tnum,size_tsize,int(*comparator)(constvoid*,constvoid*));参数说明:void*base:数组起始地址size_tnum:数组元素个数size_tsize:每一个元素的大小int(*comparator)(constvoid*,constvoid*):函数指针,指向比较函数例子:qsort10vector声明:

vector<stFileInfo*>mFileList;排序函数定义调用排序函数STL算法应用-sort11函数声明

template<classD>voidclearDataList(vector<D*>&vList);函数定义函数调用vector<stRemindProduct*>m_RemindProduct;clearDataList(m_RemindProduct);模板函数12类定义实例化deque2<stPfRecordInfo>m_RecordQueue;模板类13根本概念设计原那么防止使用全局数据组件设计应用动态库实现业务在线升级程序如何设计14封装封装可以隐藏实现细节,使得代码模块化;封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面信息隐藏用于限制外部世界与某些细节交互,这些细节与类要帮助实现的抽象物密切关系物理设计物理设计集中研究系统中的物理实体以及它们如何相互关联的问题。逻辑设计逻辑设计强调系统内部定义的和函数的交互作用,逻辑设计只研究体系结构问题;物理设计研究组织问题。分层分层是把更小、更简单或更原始的类型建成更大、更复杂或更精密的类型的过程。分层经常通过组合〔hasA、holdsA〕来进行,但任何形式的实质使用〔即任何导致物理依赖的使用〕都具备分层的资格。根本概念15高内聚、低耦合针对接口编程而不是针对实现编程优先使用对象组合,而不是类继承找出变化并封装之组件接口应该是最小化和便于使用的让功能保持在一个可行的最小范围内可以增强可用性和可重用性在组件接口中尽可能少使用外部定义类型设计原那么16使用全局数据风险存在与其他编译单元全局变量冲突的风险;全局变量将对象和代码绑定在一起,使得在别的程序中不可能有选择重用编译单元。防止使用全局数据方法如下全局数据:消除全局数据方法:〔1〕将变量放入一个结构中使它成为该结构的静态成员

访问方式:〔2〕使Global成为一个类,并且提供静态的操作和访问方法防止使用全局数据17概念〔component〕一个组件就是物理设计的最小单位,是设计的适当的根本单位。特性组件把便于管理的一定数量的内聚功能塞进一个单个的物理单位中组件把捕抓的整个抽象作为单一实体一个适当的组件可以作为一个单一的实体从系统中提出来,在另外一个系统中重用。组件设计18Framework日志组件分析19对外暴露接口写日志接口日志备份接口日志集合接口日志集合只支持4种日志类型Framework日志组件分析20日志组件初始化使用日志组件如果要实现多个日志,那么需要屡次执行例如中的代码写日志实例日志备份例如,需单独开辟线程完成日志备份GDF日志组件分析21GDF日志组件分析2222对外暴露接口写日志接口日志组件单体指针日志组件初始化传入日志配置文件,日志组件完成日志初始化完成日志注册、启动功能使用日志组件GDF日志组件分析2323配置文件说明

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论