- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 命名空间与异常处理
命名冲突 C++在引入了类机制的同时引入了一种新的作用域,即类作用域。 类的作用域是指类中定义的所有成员都只在本类中有效,与其他类没有关联。 在引用同名成员时,用所属的类名作为限定即可。 如果在类库中包含有与程序的全局实体同名的实体,或不同类库间存在同名实体,编译时也会发生名字冲突。 为了解决以上这些问题,C++提出了命名空间的概念。 §12.1.1 命名空间的概念 命名空间是指由用户自己命名的一块内存区域。它使用户可以建立一些相互分隔的作用域,把全局实体放在不同的区域范围内存放。 其定义的一般形式为: namespace [命名空间名] { 命名空间成员 } 系统会在每个程序中隐式地声明一个全局命名空间,它是独立于所有命名的命名空间之外的。 对于未指定所属空间的全局实体,系统将其默认为该全局命名空间的空间成员。 coutns::aendl; coutns::Pendl; coutns::count()endl; coutns::A::fun()endl; coutns::ns_ano::numendl; §12.1.2 高效使用命名空间 给命名空间起个别名。其一般形式为: namespace 别名= 原名; namespace StudentClassBook { … } namespace SCB=StudentClassBook; 根据命名空间成员的使用规则,即使是重复使用同一个成员多次,在每一次引用时,也要用空间名进行限定。 为了避免这种现象发生,可以用using声明命名空间成员的有效范围。其一般形式为: using 命名空间名::成员; C++提供了using namespace语句,实现一次声明一个命名空间的全部成员,形式为: using namespace 命名空间名; 该声明表示在本作用域内要用到指定命名空间中的所有成员,也就是说,在作用域内使用任何一个指定空间内的成员均不用空间名来限定。 §12.1.3 标准的命名空间 C++标准类库中所有的标识符都定义在名为std的命名空间中。 用户会在文件开头使用 using namespace std; 语句来引入std命名空间中的全部成员。 命名空间可以是不连续的,它可以在不同的文件中累积地定义同一个命名空间。这种现象叫做命名空间的累积。因此语句 namespace ns{ … } 表示若命名空间ns已经声明过,则添加新的空间成员到ns中,否则创建名字为ns的新的命名空间。 §12.2 异常处理 错误大体上分成 语法错误 在编译过程中,系统能够识别的错误 运行错误 程序编译通过,但运行过程中出现运行结果不正确、程序非正常终止和死机等现象 §12.2.2 异常处理机制 C++采用了逐级上传的异常处理机制 若在执行一个程序的过程中出现异常,可以不在本函数中处理; 而是给调用它的上一级函数发出一个信息,它的上一级捕获这个信息后,查看自己能否处理; 若不能处理则继续将该信息向上一级传递,若最高一级函数仍然无法处理,再异常终止程序运行。 异常处理机制的三部分 检查异常(try语句块) 在主调或祖先函数处,将可能产生错误的语句序列,包含在try指定的语句块中。 这是引发异常的根据,如果没有这个部分,则程序不会引发异常,当然也不需要异常处理。 抛出异常(throw语句块) 在可能产生错误的语句块中进行错误检测,如果有错误,则抛出(throw)异常。 捕捉异常(catch语句块) 将出现异常后的错误处理语句放在catch指定的语句块中,以便当异常抛出时,因类型匹配而被捕捉时就执行该块中的处理语句。 异常处理机制的语法 异常处理的一般结构为: try-catch部分: … try { 被监测的语句 } catch(异常信息类型 [变量名]/…) { 进行异常处理的语句 } … throw语句: throw 变量或表达式; 注意: 可能出现异常的语句或函数必须出现在try语句块中,否则不起作用; try语句块和catch语句块作为一个整体出现,catch语句块是try-catch结构中一部分,必须紧跟在try语句块之后,不能单独使用,在两者之间也不能插入其他语句,如下的用法是错误的: try { … } coutfilenameendl; catch(string str) { … } 在一个try-catch结构中,可以只有try语句块,而没有catch语句块; try语句块和catch语句块必须用花括号括起来,即使花括号内只有一条语句,也不能省略花括号; 在一个try-catch结构中,只能有一个t
您可能关注的文档
- 第09章 感觉器官的功能.ppt
- 第1 章技术经济学概论.ppt
- 第0章工程电磁场导论场量复习.ppt
- 第0章 矢量分析及场论基础-2.ppt
- 第06章 图层、蒙版和通道.ppt
- 第1-5章总结.ppt
- 第1-4章 企业价值评估导论.ppt
- 第1.3节 条件概率与独立性及其应用.ppt
- 第1+10章 二极管及其稳压电路.ppt
- 第10章 FTP服务器.ppt
- 2021海湾消防GST-HX-420BEx 火灾声光警报器安装使用说明书.docx
- 2022海湾消防 GST-LD-8316Ex 手自动转换装置安装使用说明书.docx
- (小升初押题卷)江苏省小升初重难点高频易错培优卷(试题)-2024-2025学年六年级下册数学苏教版.docx
- 2023-2024学年吉林省吉林市舒兰市人教版四年级上册期末考试数学试题.docx
- 2023-2024学年北京市密云区北京版四年级上册期末考试数学试卷.docx
- 2024-2025学年广东省广州市天河区人教版三年级上册期末考试数学试卷.docx
- 2024-2025学年河北省唐山市丰南区人教版五年级上册期末测试数学试卷.docx
- 人教版道德与法治一年级下册第4课《我们有精神》课件.pptx
- 消防蝶阀介绍.pptx
- 室外消火栓设置场所及设置要求.pptx
文档评论(0)