网站大量收购独家精品文档,联系QQ:2885784924

C++语言程序设计10.pptVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++语言程序设计10.ppt

C++语言程序设计 第十讲 本讲主要内容 函数模板 类模板 异常处理 函数模板(1/1) 什么是函数模板? 一个函数,它的形参可以是各种类型 如何定义函数模板? template class T或typename T 函数返回值类型 函数名(形参表) { 函数体 } 总结 函数模板就是一次性定义了多个函数体相同的函数 编译时根据函数的实参的类型,重新生成这个函数 用函数模板定义的函数也可以重载 它的重载可以是函数模板,也可以是普通函数 类模板(1/2) 什么是类模板? 一个类,它的部分或全部成员可以是各种类型 如何定义类模板? template 模板参数表 class 类名 { 类成员声明 } 类模板(2/2) 如何在类外定义其成员函数? template 模板参数表 函数返回值类型 类名T::函数名(形参表) { 函数体 } 总结 类模板多用于定义数据结构 好处是不管使用什么样的数据类型,都可以实现类模板中规定的操作 类模板中的函数成员都是函数模板 类模板的名字是:类名模板参数表 异常处理的基本思想 C++的异常处理机制 C++的异常处理机制使得异常的引发和处理不必在一个函数中,这样底层的函数可以解决具体问题,而不必过多地考虑对异常的处理。 上层调用者可以在适当的位置设计对不同异常的处理。 异常处理的实现机制(1/2) 若有异常则通过throw操作创建一个异常对象并抛出 将可能抛出异常的程序段嵌在try块之中。其他代码不抛出异常。 异常处理的实现机制(2/2) 如果在执行try块中的代码时没有发生异常,则跟在try块后的所有catch子句就不执行。 即:如果程序在执行try块时没有发生异常,则在执行完try块中的代码后直接执行最后一个catch子句后的语句。 如果在执行try块中的代码时发生异常,则依次检查catch子句并找出最匹配的并执行该子句中的代码。 如果将异常一直throw至主函数也未能找到匹配的处理器,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序。 注意:执行了某个catch块后就不再执行其他catch中的代码(p391) 例12-1处理除零异常 int Div(int x,int y) { if(y==0) throw y; return x/y; } void main() { try { cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; } catch(int) { coutexcept of deviding zero.\n; }  coutthat is ok.\n; } 异常接口声明 可以在函数的声明中列出这个函数可能抛掷的所有异常类型 例:void fun() throw(A,B,C,D); 意为函数fun可能抛出A、B 、C 、D类的异常 若无异常接口声明,则此函数可以抛掷任何类型的异常 不抛掷任何类型异常的函数声明如下:  void fun() throw(); 异常处理中的构造与析构 系统在异常发生时的工作: 将throw后的对象本身或其复制品交给对应的catch块 析构当前作用域应被析构的对象 转对应catch块开始执行 * * template class T T abs(T x) { return x 0 ? –x:x; } template class T T Max(T x, T y) { if (x y) return x; return y; } template class T class Store { private: T item; int haveValue; public: Store(void); T GetElem(void); void PutElem(T x); }; template class T T StoreT::GetElem(void) { if (haveValue == 0) { cout No item present! endl; exit(1); } return item; } template class T void StoreT::PutElem(T x) { haveValue++; item = x; } 函数f()捕获并处理异常 函数h() 引发异常 函数g() …… 调用者 异常传播方向 调用关系 程序运行结果如下: 5/2=2 except of deviding zero. that is ok.

您可能关注的文档

文档评论(0)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档