




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,C+面向对象程序设计,AnIntroductiontoObject-OrientedProgrammingUsingC+,.,C+面向对象程序设计教学内容,第1章C+概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C+的标准模板库STL第11章输入输出流第12章异常处理,.,第一章,第1章C+概述C+ABetterC,.,1.1C+起源和特点,1.1.1C+的起源1.1.2C+的特点,.,1.2C+程序的结构,1.2.1C程序与C+程序比较1.2.2C+程序结构1.2.3C+程序的编辑、编译和运行,.,C程序与C+程序比较之一,main()inta,b,sum;/*定义三个整型变量*/a=123;b=456;sum=a+b;printf(sumis%dn,sum);,main()inta,b,sum;/定义三个整型变量a=123;b=456;sum=a+b;coutsum;,.,C程序与C+程序比较之二,#includestdio.hmain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);,#include“iostream.hvoidmain()chara,b,c;a=B;b=O;c=Y;coutabfs;coutHeresyourdata:ifendlsn;return0;,.,单行注释和新的I/O流(续),cout是预定义的输出流对象,类似于C语言中的stdout。输出运算符,可用于输出C+语言中任何基本类型的数据。cin是预定义的输入流对象,类似于C语言中的stdin。输入运算符,可用于输入C+语言中任何基本类型的数据。(注意:输入和输出并不是C+语言的组成部分,它们由流库iostream支持。),.,输入含有空格的字符串,/Usegetline()toreadastringthatcontainsspaces.#include#includeusingnamespacestd;intmain()charstr80;coutEnteryourname:;cin.getline(str,79);coutstrn;return0;,.,1.3.2const存取修饰符,对象A:亲爱的,你千万不能变心?对象B:放心吧!亲爱的。对象A:你发誓!对象B:不用发誓,因为我是const!const对象B;,.,常量Constants,在C中,可以使用#define来定义符号常量。C+提供了一种更灵活、更安全的方式来定义常量,即使用关键字const来定义符号常量。,.,常量例子Constantexamples,constfloatPI=3.1415926;/PI是一个常量constintv=1,2,3,4;/数组元素vi是常量constintx;/error:noinitializer/定义常量时应初始化,否则出错。,voidf()model=200;/errorv2+;/error,.,值替换valuesubstitution,#defineBUFSIZE100,constintbufsize=100;,Becauseofsubtlebugsthatthepreprocessormightintroduce,youshouldalwaysuseconstinsteadof#definevaluesubstitution.,.,常量const和指针,指针所指向的对象为常量Pointertoconst指针本身为常量constpointerTheconstmodifiesthethingitis“closestto.”,.,指向常量的指针Pointertoconst,constint*u;/pointertoconstant*u=18;/error:upointstoconstantu=p;/OK,.,常指针constpointer,intd=1;int*constw=/error:wisconst,.,const修饰函数参数,voidprint_salary(constfloat*salary)coutsalaryy)z=x;elsez=y;return(z);内联函数的调用方法与普通函数没有区别。,.,类中定义的内联函数Inlinefunction,Anyfunctiondefinedwithinaclassbodyisautomaticallyinline,classDateintday,month,year;public:voidinit_date(intdd,intmm,intyy)day=dd;month=mm;year=yy;,Hereinit_dateisainlinefunction,.,函数调用时的时间开销,1函数调用时的时间开销:保护现场,恢复现场。2用关键字inline说明内嵌函数。编译器直接用内嵌函数体的编译代码插入在函数调用语句处,这一过程称为函数的嵌入扩展。利用内嵌函数减少了调用普通函数时的压栈和弹栈操作,从而提高程序的运行速度。3内嵌函数比带参数的宏的好处。一般情况下,只有较短的函数才定义为内嵌函数。使用内嵌函数实际上是一种增加空间开销以减小时间开销的方法。,.,为什么使用内联函数,Efficiency效率在C程序中,可使用宏macros达到同样的目的,但是宏是通过预处理来处理的,不进行类型检查,容易造成难以发现的错误。宏macros在类的内部不能使用,宏不能作为类的成员。,.,为什么使用内联函数(cont.),为了克服宏的上述缺陷,C+引入了内联函数。内联函数具有高效率,而且:进行类型检查,避免出现类型不匹配的错误。可以作为类的成员函数。Toretaintheefficiencyofthepreprocessormacro,buttoaddthesafetyandclassscopingoftruefunctions,C+hastheinlinefunction.,.,Howdoinlinefunctionswork编译器处理内联函数的过程,类型检查Typechecking(Toassuresafety)将函数代码插入到函数调用处thensubstitutesthefunctionbodyforthefunctioncall这样函数代码将占据更所得存储空间TheinlinecodedoesoccupyspaceTheshort,smallandfrequentlycalledfunctionsaresuitableforinlinefunctions.,.,1.3.4函数原型(functionprototype),什么是函数原型?描述函数原型的三大要素:函数名参数类型函数返回值类型函数原型的例子:inttranslate(floatx,floaty,floatz);inttranslate(float,float,float);,.,【例1.7】,voidsqr_it();/*functiondeclaration*/intmain()intx;x=10;sqr_it(x);printf(Thesquareofxis%dn,x);return0;voidsqr_it(int*i)*i=(*i)*(*i);,.,运行时出错,【例1.7】本例的C程序能够成功通过诸如TurboC这样的C编译器的检查,但会在运行阶段发生错误。该程序运行后的结构显示如下:Thesquareofxis10Nullpointerassignment,.,使用函数原型执行强类型检查【例1.8】,voidsqr_it(int*i);/函数原型intmain()intx;x=10;sqr_it(x);coutThesquareofxisxn;return0;voidsqr_it(int*i)*i=(*i)*(*i);,typemismatch类型不匹配,.,函数原型的作用,C+语言是强类型化语言,任何函数在使用以前必须有该函数的原型说明,以便进行实际参数与形式参数之间的类型匹配检查。函数返回值的类型和函数参数的类型、个数、次序在函数声明,函数定义和函数调用时必须匹配。C+语言的编译器执行上述检查能显著减少很多隐藏的错误。,.,函数原型与C语言的函数类型说明,函数原型是在C语言的函数类型说明(函数声明)的基础上进行扩充后形成的,它不但说明了函数返回值的类型,还要确定函数参数的类型、个数、次序及缺省值。,.,1.3.5带缺省参数的函数,例如:以下函数带有一个缺省值为0的参数。voidmyfunc(doubled=0.0)myfunc(198.234);/passanexplicitvaluemyfunc();/letfunctionusedefault,.,缺省参数的例子,voidDrawCircle(intx,inty,intr=10);DrawCircle(50,20);DrawCircle(50,100,30);,带缺省参数函数主要由两个作用:简化编程;有利于程序扩充,而不影响原有代码。,.,1.3.6函数名重载(overload),两或两个以上的函数共享同一个名称,就称为函数名重载。OverloadedFunctionsMultiplefunctionscanhavethesamenamewithdifferentimplementations.函数重载简化了函数调用工作。,.,函数重载的例子,#include/Overloadabs()threewaysintabs(intn);longabs(longn);doubleabs(doublen);/prototypeisneccessaryforC+compiler,这些都是函数原型,.,函数重载的例子,main()coutAbsolutevalueof-10:abs(-10)n;coutAbsolutevalueof-10L:abs(-10L)n;coutAbsolutevallueof-10.01:abs(-10.01)n;return0;,.,abs()forints,/abs()forintsintabs(intn)coutInintergerabs()n;returnn0?-n:n;,.,abs()forlongs,/abs()forlongslongabs(longn)coutInlongabs()n;returnn0?-n:n;,.,abs()fordoubles,/abs()fordoublesdoubleabs(doublen)coutIndoubleabs()n;returnn0?-n:n;,.,1.3.7new和delete运算符,在C语言中,使用函数malloc()分配动态内存,用函数free()释放动态内存;在C+语言中,还可以使用运算符new分配动态内存,用delete释放动态内存。,.,new和delete的简单应用,/Asimpleexampleofnewanddelete.#includemain()int*p;p=newint;/allocateroomforaninteger/alwaysmakesurethatallocatesucceededif(!p)coutAllocationerrorn;return1;,.,Asimpleexampleofnewanddelete(cont),*p=1000;coutHereisintegeratp:*pn;deletep;/releasememoryreturn0;,.,new和delete的优点,new和delete完成的功能类似于malloc()与free(),但它们有几个优点:1)简洁性:能自动计算所要分配的内存的大小;2)可靠性:编译时进行类型检查;3)灵活性:new和delete运算符可以被重载。注意:用new申请的动态内存必须用delete释放。,.,1.3.8引用(reference),引用是一个隐含指针,可以看作变量的另一个名称(别名)。引用有三种使用方法:,.,引用作为函数参数(最重要的用法),#includevoidf(int,.,引用作为函数参数(继续),/f()nowusesareferenceparametervoidf(int/put100intotheargumentusedtocallf(),.,指针参数和引用参数的比较,/交换实际参数的值voidswap(int*x,int*y)inttemp;temp=*x;/保存地址x中的值*x=*y;/putyintox*y=temp;/putxintoy/调用函数swap()时使用变量i和j的地址swap(,/交换实际参数的值voidswap(int,.,引用参数的几个好处,当使用引用参数的时候,传递的是用作参数的变量的地址。1)地址被自动传递;不需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年内分泌科糖尿病临床诊断对策考试答案及解析
- 学校四班级春季教学工作方案
- 2025年康复医学综合治疗方案设计模拟测试答案及解析
- 2025年麻醉科安全操作流程考核答案及解析
- 2025年心电图解读技能应用考核测试卷答案及解析
- 2025年肿瘤放疗放射治疗的副作用模拟测试卷答案及解析
- 新质生产力的哲学与文化思考
- 2025年心血管病学心梗后康复训练考试卷答案及解析
- 江苏新质生产力发展动态
- 新质生产力的核心体现维度
- 收费员考试题库及答案
- 城市更新中装饰工程重点及难点措施
- 惠普尔养障体肺炎诊疗要点解析
- 棒针编织教学课件
- 护士关爱活动方案
- 职业健康:放射卫生知识培训计划
- 口腔团队的管理与建设
- 公司维护人员薪酬管理制度
- 2025至2030年中国宠物机器狗行业投资前景及策略咨询报告
- 公司关工委活动方案
- 链家签约文件合同模板
评论
0/150
提交评论