




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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-2025学年高二下生物期末质量跟踪监视模拟试题含解析
- 天津市蓟州区2024-2025学年数学高二下期末调研试题含解析
- 城市更新项目厂房土地购置及开发合作合同
- 休闲农业场地外包租赁合同范本
- 农业银行信用的借款合同(6篇)
- 爱岗敬业个人先进事迹(3篇)
- 员工配车公司管理制度
- 公路实施方案的试题及答案
- 公路工程定额分析试题及答案
- 软件系统操作手册模板
- 楼顶发光字制作安装合同
- 中德材料中英文对照
- 个人租房合同协议书电子版免费下载7篇
- 带电流互感器三相四线有功电表的接线演示文稿
- 2023年高考全国甲卷数学(理)试卷【含答案】
- 2023年安徽ACM省赛试题
- 2023深圳一模数学试卷及答案
- (完整版)METS医护英语水平考试
- 车险查勘定损中级培训水淹车处理指引及定损培训
- GB/T 25695-2010建筑施工机械与设备旋挖钻机成孔施工通用规程
评论
0/150
提交评论