- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章(下篇)例外处理.ppt
第十一章 (下篇) 例外處理 service-side: throw Exceptions client-side: try-and-catch 客戶端與服務端程式 例外處理(Exception Handling) double circle_area(int r) { if (r0) {return –1 ;} return 3.14*r*r; } void main() { double r ; cin r ; double a = circle_area(r) ; if (a == -1) { /*錯誤處理 */ } else cout a endl ; } } 例外處理 double circle_area(double r, bool suc) { if (r0) {cout “r0”; suc = false ;} suc = true ; return 3.14*r*r; } void main() { double r ; bool suc; cin r ; double a = circle_area(r, suc) ; if (suc == false) { /*錯誤處理 */ } else cout a endl ; } } 例外處理 double circle_area(double r, int error_code) { if (r 0) error_code = 1 ; if (r==0) error_code = 2 ; error_code = 0 ; return 3.14*r*r; } void main() { double r ; int error_code; cin r ; double a = circle_area(r, error_code) ; if (error_code == 0) cout a endl ; else if (error_code == 1) { /*錯誤處理 */ } else if ...... } 例外處理 double circle_area(double r) { if (r0) { cout “circle(): r0”; exit(1) ; } return 3.14*r*r; } void main() { double r ; cin r ; cout circle_area(r) endl ; } 缺點 錯誤發生時,服務端程式通知客戶端程式的方式千奇百怪,使用者窮於應付 服務端程式有時也參與錯誤處理,權責不清 縱使權責清楚,客戶端程式也將因處理錯誤而使可讀性大大降低 可讀性降低 // 完全無例外處理 void main() { double r, w, h, ta=0 ; cinrwh ; ta = circle_area(r) + rectangle_area(w,h); cout “result=“ ta endl; } ? 加上例外處理的結果 可讀性大幅降低 void main() { double r, w, h, ta=0 ; bool suc ; cin rwh; double a = circle_area(r, suc) ; if ( suc) { ta += a; } else {cout “error”; } a = rectangle_area(w, h) ; if (a == -1) { ....} else if (a == -2) {...} else if {ta += a; } cout “result=“ ta endl ; } 結論 平心而論,完全沒有錯誤處理的程式不論在發展時期或執行時期都將造成困擾。 錯誤處理既是必要的,是否有明確而一致的方式? C++, Java 客戶端: try-catch, 服務端: throw 例外發生時的權責 C++例外處理: 使用前 double circle_area(double r, int error_code) { if (r0) error_code = -1 ; error_code = 0 ; return r*r*3.14 ; } void main() { double r ; cin r ; int error_code ; double a = circle_area(r, error_code) ; if (error_code == -1) cout “error, code=“ x endl ; else cout a endl ; c
您可能关注的文档
- 第1天广州布里斯班.PDF
- 第1天深圳杨梅区大鹏古城.PDF
- 第2讲闭合电路欧姆定律焦耳定律.doc
- 第3章关系数据库语言-SQL.ppt
- 第3章数控加工编程.PDF
- 第4期(总第54期).doc
- 第8章网页动态效果.PDF
- 第三届感动润峰演唱年会暨销售收入过百亿庆典大会隆重举行.PDF
- 第三章双极型晶体管及其应用.PDF
- 第三讲信息化教学设计概论.doc
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
文档评论(0)