模板和异常处理.ppt.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * 标准C++异常是一个异常层次的优秀范例,通过使用可进一步增强和丰富它。 3. 用引用而非值去捕获 如果抛出一个派生类对象而且该对象被基类的异常处理器通过值捕获到,对象会被“切片”,也就是说,随着向基类对象的传递,派生类元素会被依次割下,直到传递完成。要尽力避免这种情况,因为这时对象的行为像基类而不像它本来应该是的派生类对象。 4. 在构造函数中抛出异常 由于构造函数没有返回值,因此,如果没有异常机制,可 以按以下两个选择用于报告在构造期间的错误: (1) 设置一个非局部的标志并希望用户检查它。 (2) 返回一个不完全被创建的对象并希望用户检查它。 5. 不要在析构函数中导致异常 由于析构函数会在抛出其他异常时被调用,所以永远不要 打算在析构函数中抛出一个异常或者通过执行在析构函数中 相同的动作导致其他异常的抛出。如果这些发生了,这意味 着在已存在的异常到达引起捕获之前抛出一个新的异常,这 会导致对 terminate() 的调用。 这就是说:假若调用一个析构函数中的任何函数都有可能 会抛出异常,则这些调用应该写在析构函数中的一个 try 块 中,而且析构函数必须自己处理所有自身的异常,即这里的 异常都不应逃离析构函数。 6. 避免无保护的指针 假若资源分配给无保护的指针,那麽意味着在构造函数中 存在一个缺点。由于该指针不拥有析构函数,所以当在构造 函数中抛出异常时那些资源将不能被释放。 开销 使用任何一个新特性必然有所开销。当异常被抛出时有相 当的运行时间方面的开销,这就是从来不打算把异常用于普 通程序流控制的一部分原因。异常的发生应当是很少的,所 以开销集中在异常上而不是在普通的执行代码上。设计异常 处理的重要目标之一是:在异常处理实现中,当异常不发生 时应不影响运行速度。这就是说,只要不抛出异常,代码的 运行速度如同没有加载异常处理时一样,这是因为异常处理 都依赖于使用特定的编译器。 异常处理也会引出额外信息(空间开销),这些信息被编 译器置于栈上。 异常对象除了能作为特定的异常范围的对象传进送出 外,也可以像其他对象一样被正确地在周围传送。当异常处 理器工作完成时,异常对象也被相应地销毁。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 标准库类模板 vector 的应用 ( 续 ) # include iostream #includevector // 包含 STL 向量容器头文件 # includealgorithm // 包含 STL 算法头文件 # includenumeric // 包含 STL 数值算法头文件 using namespace std; int main(void) { vectordouble v1 ; // 定义双精度型向量 cout size=v1.size() endl ;// 输出向量大小 v1.push_back(6.6); // 向尾部插入 6.6 v1.push_back(8.3); vectordouble:: iterator i1 ; // 定义 迭代器 i1 // 查找指定值,让 i1 指向找到的元素 i1= find (v1.begin(),v1.end(),8.3); if(i1)v1.insert(i1,4.5); // 在指定位置前插入 4.5 cout size=v1.size() endl ; for( int i=0;iv1.size();i++) cout v1[i] ;// 输出向量中元素 cout endl ; * 标准库类模板 vector 的应用 ( 续 ) i1= find (v1.begin(),v1.end(),6.6); // 删除元素后,输出该位置的元素值 if(i1) cout *(v1.erase(i1)) endl ; cout size=v1.size() endl ; int a[8]={67,89,52,26,90,76,77,65}; vector int v2(a,a+8) ; // 定义整型向量 v2.push_back(99); v2.push_back(80); cout Max=* max_element (v2.begin(),v2.end());// 计算最大元素 cout \ nSum = accumulate (v2.begin(),v2.end(),0);// 求元

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档