




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 d n sum main inta b sum 定义三个整型变量a 123 b 456 sum a b cout sum C程序与C 程序比较之二 include stdio h main chara b c a B b O c Y putchar a putchar b putchar c include iostream h voidmain chara b c a B b O c Y cout a b c 1 3C 的一些新特性 1 3 1单行注释和新的I O流1 3 2const修饰符1 3 3内联函数1 3 4函数原型1 3 5带缺省参数的函数1 3 6函数名重载1 3 7new和delete运算符1 3 8引用 reference 1 3 1单行注释和新的I O流 I Ostream includemain inti floatf chars 80 cout i f s cout Here syourdata i f endl s n return0 单行注释和新的I O流 续 cout是预定义的输出流对象 类似于C语言中的stdout 输出运算符 可用于输出C 语言中任何基本类型的数据 cin是预定义的输入流对象 类似于C语言中的stdin 输入运算符 可用于输入C 语言中任何基本类型的数据 注意 输入和输出并不是C 语言的组成部分 它们由流库iostream支持 输入含有空格的字符串 Usegetline toreadastringthatcontainsspaces include includeusingnamespacestd intmain charstr 80 cout Enteryourname cin getline str 79 cout str n 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 数组元素v i 是常量constintx error noinitializer 定义常量时应初始化 否则出错 voidf model 200 errorv 2 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 cout salary n const可以阻止参数被函数修改 const的其他用途Otherusesofconst returntypes classobjectsandmemberfunctions volatile存取修饰符 修饰符volatile通知编译器 变量值可能由程序中没有显示说明的方式所改变 因此在作编译优化时 不要通过将该变量放入寄存器来提高速度 Volatile原意是 可变的 不稳定的externvolatileclock externconstvolatileclock 1 3 3内联函数 内嵌函数 内置函数inlinefunction 在函数声明或定义的前面加上关键字 inline 该函数就被声明为内联函数 inlineintmax intx inty max被说明为内联函数 intz if x y z x elsez y return z 内联函数的调用方法与普通函数没有区别 类中定义的内联函数Inlinefunction Anyfunctiondefinedwithinaclassbodyisautomaticallyinline classDate intday 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 d n 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 cout Thesquareofxis x n 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 cout Absolutevalueof 10 abs 10 n cout Absolutevalueof 10L abs 10L n cout Absolutevallueof 10 01 abs 10 01 n return0 abs forints abs forintsintabs intn cout Inintergerabs n returnn 0 n n abs forlongs abs forlongslongabs longn cout Inlongabs n returnn 0 n n abs fordoubles abs fordoublesdoubleabs doublen cout Indoubleabs n returnn 0 n n 1 3 7new和delete运算符 在C语言中 使用函数malloc 分配动态内存 用函数free 释放动态内存 在C 语言中 还可以使用运算符new分配动态内存 用delete释放动态内存 new和delete的简单应用 Asimpleexampleofnewanddelete includemain int p p newint allocateroomforaninteger alwaysmakesurethatallocatesucceededif p cout Allocationerror n return1 Asimpleexampleofnewanddelete cont p 1000 cout Hereisintegeratp p n 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的地址s 交换实际参数的值voidswap int 引用参数的几个好处 当使用引用参数的时候 传递的是用作参数的变量的地址 1 地址被自动传递 不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文化旅游演艺项目成功案例解析与运营模式创新报告
- 2025年深远海风电场规划与海上风能资源评估技术引进与自主创新能力提升报告
- 2025年新能源商用车辆市场新能源汽车充电桩市场智能化应用:市场需求与应用场景报告001
- 山东省枣庄市第三十九中学2024-2025学年上学期阶段性诊断检测七年级数学试题(无答案)
- 网络商城和公司转让居间合同
- 四年级 党规党章进课堂教学计划
- 2025年AI应用市场洞察分析报告
- 岩石矿产与课件
- 岩土勘察测量培训课件
- 小黄鹂鸟课件
- DB45-T 1696-2018危岩防治工程技术规范-(高清可复制)
- 喷砂检验报告
- 旅游英语ppt课件(完整版)
- DB32-T 4062-2021城市轨道交通工程质量验收统一标准-(高清现行)
- 城乡融合发展的做法和经验乡村振兴培训课件
- 最新肛肠科临床诊疗指南
- 供应商分级的管理制度管理办法
- 义务教育《语文》课程标准(2022年版)
- T∕CTWPDA 06-2019 橡胶木指接拼板
- 职高数学各章节知识点汇总
- 完整版_第八版内科冠心病课件
评论
0/150
提交评论