版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++Overview潘爱民panaimin@/CompCourse/内容简介C++语言基础Object-BasedProgrammingObject-OrientedProgrammingSTLC++之我见C++语言在变化,我们的概念也要调整变化最能反映OO思想的语言,掌握C++有助于理解OO区分C和C++,C++不是C语言,不要用看待C语言的方式来看待C++掌握C++语言的基础知识操作系统的基础知识文件API、内存管理…infrastructures计算机原理汇编语言C/C++是产生ASM代码的framework编译和执行过程编译过程执行过程许多概念进程、heap、stack,...程序开发过程开发编辑编译出错?链接执行结果正确?结束源程序file.cpp目标程序file.obj库函数和其它OBJ可执行程序file.exeYesYesNoNoBuild过程:compiletimeCompile+link如何对待错误和警告错误:一定要排除,从第一个错误找起警告:或者排除,或者确实理解不会对程序造成危害学会设置compileoptions和linkoptionsIDE中如何设置?——一定要知道!命令行如何设置?程序代码中如何设置?执行过程:runtimeLoad、重定位、初始化、main如何调试断点assertion程序对环境的依赖性系统环境CRT内存影像C++语言内容数据类型内置(built-in)、标准库、自定义的表达式控制语句函数(模板)异常处理函数模板例子:template<classType>Typemin(Typea,Typeb){ returna<b?a:b;}min(10,20);min(10.0,20.0);模板实例化——由参数决定隐式实例化显式实例化min<int>(10,20);函数模板(续)两种编译模式:inclusion模式separation模式(export关键字)模板特化重载函数模板异常处理(exceptionhandling)错误处理机制、错误代码隔离Throw(raise)anexceptionThrowexpression类似于return语句Try、catch语句(handler)try{}catch(type){}或catch(typeobj){}类似于函数调用但是类型匹配发生在runtime异常处理(续)嵌套机制,如果最外层没有处理,则由terminate来处理Localobject正常析构rethrow在catch子句中仍然可以throwCatchallhandlercatch(…)声明函数时指定函数可能的异常intfunc(int)throw(string);如果没有指定的异常发生,调用unexpected()Object-BasedProgrammingclass实现数据封装对象构造函数与析构函数访问控制、友元嵌套类类中成员初始化虚拟函数类中运算符重载类模板this指针在类的内部指向类自身的指针在每个成员函数中,this指针提供了使用上的方便this指针把类的多个实例对象区分开来模板函数模板
即以数据类型为“参数”的函数例如:
template<classT>Swap( T&a,T&b){Ttemp;temp=a;a=b;b=temp;}类模板(模板类或类生成器)
即以数据类型为“参数”的类例如:
template<classT>classStack{private:Tpool[maxNum];
intsp;public:Stack();voidPush(Tx);TPop();BOOLIsEmpty()const;BOOLIsFull()const;};
使用:
Stack<int>intStack;Stack<float>floatStack;模板(续)定义模板实例化模板参数:类型参数、非类型参数两种编译模式:inclusion模式separation模式(export关键字)类模板特化(classtemplatespecializations)类模板部分特化(classtemplatepartialspecializations)从面向过程转换到面向对象面向过程以功能为组织单元在C语言中以函数作为功能单元;通过数据结构来描述具体的问题;数据在功能(函数)之间以参数的形式被传送。
面向对象用类class封装数据以及与数据相关的操作;用类的继承性来实现类的重用性;多态性。Object-OrientedProgrammingCShapeCPointCLineCCircleCArcCTextCShapeCPointCLineCCircleCArcCText多态性和虚拟函数多态性是面向对象的一个支柱
允许程序在实施对象的操作时,允许对象按不同的方式完成不同类型对象的操作;不同类型对象有自己实现操作的方法。虚拟函数虚拟函数实现了多态性。说明:在函数说明之前加上关键字virtual在基类的说明中,定义虚拟函数:
virtualvoidDisplay();调用:
CShape*pShape=GetCurrentShape();
pShape->Display();对象的内存分布图Vptr指针和vtab表classA{private:
intvalue;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};变量偏移量vptr0value4A::Func1A::Func2vtab对象的内存分布图(续一)classB:pulicA{private:
intvalue1;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};变量偏移量vptr0value4value18B::Func1B::Func2vtab对象的内存分布图(续二)classB:pulicA{private:
intvalue1;public:virtualvoidFunc1(void)};变量偏移量vptr0value4value18B::Func1A::Func2vtab继承关系Public继承“is-a”关系private继承“has-a”关系可以用复合类或者嵌套类来表示protected继承比private继承放宽限制virtual继承单个共享实例虚基类的构造由themostderivedclass完成类型转换Static_castDynamic_cast向下转换voidDraw(CShape*shape){ //shape->DrawRect() //shape->DrawCircle() if(dynamic_cast<CRect*>(shape)){…}}RTTI:typeidStatic_cast类型转换classB{...};classD:publicB{...};voidf(B*pb,D*pd){D*pd2=static_cast<D*>(pb);//notsafe,pbmay//pointtojustBB*pb2=static_cast<B*>(pd);//safeconversion...}Static_cast类型转换(续)classB{...};classD:publicB{...};voidf(B*pb){D*pd1=dynamic_cast<D*>(pb);D*pd2=static_cast<D*>(pb);}C++标准库C标准库iostreamlibrarycin、cout、cerrostream&operator<<(ostream&os,constMyClass)istream&operator>>(istream&os,MyClass&)STL(StandardTemplateLibrary)GenericProgramming作者:AlexanderStepanov目标:高效、灵活地实现各种算法思想:对算法进行抽象,与数据表示分开以模板技术为基础函数模板类模板C++的发展使得这种思想得以实现STL基础Object-BasedProgramming有关class的各种设计技术函数对象(functionobjects)重载了函数调用操作符()的类模板函数模板类模板模板特化STL思想数据类型算法容器STL实现Iterator对象容器(Container)算法(Algorithm)Iterator对象Iterator对象STL容器顺序容器(SequenceContainer)vectordequelist关联容器(AssociativeContainer)setmultisetmapmultisetSTL迭代器迭代器(Iterator)是指针(pointer)的泛化任意访问双向迭代器向前迭代器输入迭代器输出迭代器STL算法改变顺序的操作reverse、replace不改变顺序的操作for_each、find排序及相关操作sort、rotate常用的数字操作count、sum_up使用STL#include<functional>#include<list>#include<iostream>#include<algorithm>usingnamespacestd;template<typenameT>voidprint_elements(Telem){cout<<elem<<"";}void(*pfi)(int)=print_elements;voidmain(){
intia[7]={0,1,2,3,4,5,6}; list<int>ilist(ia,ia+7); //以陣列做為list的初值 for_each(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年企业运营合作合同样式
- 2024年公共设施施工合同范本3篇
- 2024版全新设备购买合同2篇
- 2024年度市场营销及推广服务外包合同2篇
- 2024年度口腔诊所与口腔健康教育机构合作合同3篇
- 2024年度铝材采购合同的风险管理2篇
- 2024年度软件开发合同标的为企业管理系统3篇
- 2024年建筑行业施工班组承包协议模板版B版
- 2024年办公室租赁合同范例3篇
- 2024年个人委托代理合同标准文本版B版
- 血透并发脑出血护理查房-尿毒症合并脑出血护理查房
- 年产700吨青霉素的生产工艺设计
- 国家开放大学2024春《毛泽东思想和中国特色社会主义理论体系概论-试卷A》大作业参考答案
- 个人提成协议书
- 【中法文化差异对国际商务谈判的影响调查报告10000字(论文)】
- 医养个案管理职业技能等级证书(中级)参考试题库(含答案)
- 厂区绿化养护方案及措施
- (2024年)人工智能智能控制课件
- 2023年杭州市上城区教育局招聘事业编制教师考试真题
- 胰腺穿刺的护理
- 中等职业学校对口升学教学管理办法
评论
0/150
提交评论