276-13-计算机程序计-1模板与异常处理(赵老师).ppt_第1页
276-13-计算机程序计-1模板与异常处理(赵老师).ppt_第2页
276-13-计算机程序计-1模板与异常处理(赵老师).ppt_第3页
276-13-计算机程序计-1模板与异常处理(赵老师).ppt_第4页
276-13-计算机程序计-1模板与异常处理(赵老师).ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

0 计算机程序设计第13章异常处理与模板 西安交通大学计算机教学实验中心 1 本章内容 模板函数模板类模板异常处理 2 术语简介 模板通用的语言描述称为模板函数模板通用抽象的函数描述类模板通用抽象的类描述异常处理机制指用于控制程序期间错误的结构化方法 3 求两个数的最大值 intMax inta intb returna b a b doubleMax doublea doubleb returna b a b templateTMax Ta Tb returna b a b cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl 4 函数模板 定义一个函数模板的形式为 template 其中中的模板参数的形式为 class这里关键字class与一般所讲的类无关 指某一个内部类型或用户自己定义的数据类型在使用模板函数时 模板中的类型参数可用一个实际类型替换 从而达到了类型通用的目的 5 求两数最大值的函数模板 include 例12 1 include 含有重载 TMax Ta Tb returna b a b intmain inti1 3 i2 5 doubled1 3 3 d2 5 2 stringstr1 xjtu str2 xian cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl cout Typestring Max str1 str2 endl return0 6 模板函数的说明语句 include 例12 1 includeusingnamespacestd templateTMax Ta Tb intmain inti1 3 i2 5 doubled1 3 3 d2 5 2 stringstr1 xjtu str2 xian cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl cout Typestring Max str1 str2 endl return0 templateTMax Ta Tb returna b a b 7 冒泡排序改成模板 includevoidbubble sort inta intN for inti 0 ii j j 1 if a j 1 a j inttmp a j 1 a j 1 a j a j tmp intmain constintCOUNT 16 intlist COUNT 503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703 bubble sort list 16 cout Theresultis endl for intk 0 k 16 k cout list k cout endl return0 8 includetemplatevoidbubble sort Ta intN for inti 0 ii j j 1 if a j 1 a j Ttmp a j 1 a j 1 a j a j tmp intmain constintCOUNT 16 intlist1 COUNT 503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703 doublelist2 COUNT 50 3 87 51 2 6 1 90 8 17 0 89 7 27 5 65 3 42 6 15 4 5 09 6 12 67 7 7 65 7 03 intk bubble sort list1 16 cout Theresultis endl for k 0 k 16 k cout list1 k cout endl bubble sort list2 16 cout Theresultis endl for k 0 k 16 k cout list2 k cout endl return0 9 函数模板的注意事项 在函数模板的参数表中 至少有一个参数的类型为模板的类型参数 另外 函数的返回值的类型也可以是该类型参数模板中可以带有多个参数类型 例如 templatevoidfunc1 T1arg1 T2arg2 T3arg3 函数可以带有模板参数表中未给出的数据类型的参数templateTfunc2 Targ1 intarg2 10 include 例13 4intPower inta intexp 整数 实数的整数次幂 intans a while exp 0 ans a returnans intmain 测试用主函数 cout 3 5 Power 3 5 endl cout 1 1 2 Power 1 1 2 endl return0 求幂函数 11 include 例13 4templateTPower Ta intexp Tans a while exp 0 ans a returnans intmain 测试用主函数 cout 3 5 Power 3 5 endl cout 1 1 2 Power 1 1 2 endl return0 定义求幂函数的模板 12 在数组a中查找k 找到 返回下标 includeintsequentialsearch inta constint 顺序查找 13 includetemplateintsequentialsearch Ta constT 用函数模板实现顺序查找 14 类模板 类是对问题空间的抽象 而类模板则是对类的抽象 与函数模板相似 程序中可以通过高度抽象首先定义一个类模板 然后通过使用不同的实参生成不同的类 类模板的定义方法为 template class 使用对象名1 对象名2 15 定义通用数组类 includetemplateclassarray public X ptr array intN ptr newX N array delete ptr intmain arraya 16 a ptr 0 168 cout arrayclass a ptr 0 endl return0 16 圆柱体类 includeclassCylinder intx y z intR H public Cylinder x y z R H 0 Cylinder intx1 inty1 intz1 intR1 intH1 x x1 y y1 z z1 R R1 H H1 intvolumn return3 14 R R H intarea return6 28 R R R H voidmain Cylinderhhh 0 0 0 2 3 int cout 体积 hhh volumn endl cout 面积 hhh area endl 17 定义圆柱体类模板 includetemplateclassYZT Xx y z XR H public YZT x y z R H 0 YZT Xx1 Xy1 Xz1 XR1 XH1 x x1 y y1 z z1 R R1 H H1 Xvolumn return3 14 R R H Xarea return6 28 R R R H voidmain YZThhh 0 0 0 2 0 3 测试double类型 int cout 体积 hhh volumn endl cout 面积 hhh area endl 18 异常处理机制 异常处理机制是C 中用于控制管理程序运行期间错误的一种结构化方法其基本思想是将异常的检测与处理异常分离intfactor intN if N 0 cout error return 1 throw 1 else 当在程序中检测到异常存在 将引发一个异常 并转向处理这个异常的程序模块 19 异常处理机制的语法结构 try catch 类型1参数1 catch 类型n参数n catch 20 异常处理机制注意 引发异常的throw语句必须在try语句块内 或是由try语句块中直接或间接调用的函数体执行throw语句的一般形式为 throwexceptionexception为异常值 通常写成表达式Throw语句功能 将异常值与catch语句的类型进行匹配 并转向执行匹配上的catch模块catch语句的类型匹配过程中不作任何类型转换 21 异常处理机制的使用 includevoidtestfun inttest try if test test 0throwtest 抛出异常elsethrow itisazero catch inti cout Exceptoccurred i endl catch constchar s cout Exceptoccurred s endl intmain testfun 10 testfun 100 testfun 0 return0 22 除0异常 include Example13 6 除0异常doubleDiv doublea doubleb intmain 测试用主函数 doublen1 n2 result cout n1 n2 try result Div n1 n2 cout n1 n2 result endl catch double cout Exceptoccurred attemptedtodividebyzero endl cout Inputtwonumber endl cout Thatisok endl return0 doubleDiv doublea doubleb if b 0 0 throwb returna b 23 求一元二次方程的根 include Example13 7 解一元二次方程 includevoidRoot doublea doubleb doublec doublex1 x2 delta delta b b 4 a c if a 0 throw dividebyzero if delta a b c try Root a b c catch char cout Exceptoccurred itisnotaquadraticequation endl catch int cout Exceptoccurred therealrootofthisequationdoesnotexist n return0 24 友元 classTEMP private intx inty public voidprint TEMPa a x 11 a y 12 cout a x endl cout a y endl intmain print return0 25 友元 classTEMP private intx inty public friendvoidprint voidprint TEMPa a x 11 a y 12 cout a x endl cout a y endl intmain print return0 26 友元 允许类外部的函数或者类具有该类私有成员的特权 一 友元函数一个类的友元函数是在该类中说明的 用关键字friend修饰的函数 该函数有权访问类中所有的成员 说明一个友元的一般形式为friend 27 将另一个类的成员函数说明为友元 classTEMP2 private intx inty public voidset classTEMP private intx inty public friendvoidTEMP2 set voidTEMP2 set TEMPa a x 21 a y 22 cout a x endl cout a y endl intmain TEMP2b b set return0 28 将一个类说明为友元 友元类 classTEMP2 private intx inty public voidset classTEMP private intx inty public friendvoidTEMP2 set friendclassTEMP2 voidTEMP2 set TEMPa a x 21 a y 22 cout a x endl cout a y endl intmain TEMP2b b set return0 29 本章实验作业 30 3 例13 6中所定义的通用栈类实际上是不完善的 如无法根据用户需求改变栈的大小 没有提供栈满溢出无法压入和空栈无法弹出提示等 请改进该程序 31 3 例13 6中所定义的通用栈类实际上是不完善的 如无法根据用户需求改变栈的大小 没有提供栈满溢出无法压入和空栈无法弹出提示等 请改进该程序 32 4 C 中的数组类型比较简单 它的下标只能从0开始 没有负数下标 而且没有数组越界检查 请用类模板设计一个newArray类 该类的对象可以是整型 浮点型 字符型等任何元素类型的数组 而且当访问数组成员时 如果下标越界 程序可以报错并终止 如下是一些例子 newArrayA1 3 同传统类型的整型数组 包含5个元素的浮点型数组 其成员为A2 2 A2 1 A2 0 A2 1 A2 2 newArrayA2 2 3 请编写一个测试程序 33 简单的文件读写程序 求n个数的和数据从文件中读取 个数不定数据文件的格式12345 将和 个数 平均值写到文件中 34 习题 实验本章第1 2题作业本章第4题选做题编写判定函数isEqualTo的函数模板 用相等运算符比较两个参数 如果相等则返回1 如果不相等则返回0 使用这个函数模板 使得程序对各种内部类型 intdoublefloatcharunsigned 调用isEqualTo 用函数模板 实现三个数据的比较 函数返回三个数中的最大值 编写主函数测试该函数模板 数据的类型涉及int double char 35 编写判定函数isEqualTo的函数模板 用相等运算符比较两个参数 如果相等则返回1 如果不相等则返回0 使用这个函数模板 使得程序对各种内部类型 intd

温馨提示

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

评论

0/150

提交评论