第11章命名空间与异常处理优秀课件.ppt
《第11章命名空间与异常处理优秀课件.ppt》由会员分享,可在线阅读,更多相关《第11章命名空间与异常处理优秀课件.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章命名空间与异章命名空间与异常处理常处理第1页,本讲稿共39页主要内容主要内容第2页,本讲稿共39页一、命名空间定义:定义:是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如Windows中,同一目录下不能有两个相同名称的文件,但如果把这两个文件分别放在不同的中,同一目录下不能有两个相同名称的文件,但如果把这两个文件分别放在不同的目录下,就不会存在同名文件的冲突问题。目录下,就不会存在同名文件的冲突问题。例如:例如:C:windowstest.txt 和和 C:mydatatest.txt
2、 其中前者在其中前者在C:windows目录下,后者在目录下,后者在C:mydata目录下,这些目录就相当于目录下,这些目录就相当于命名空命名空间间,它们将同名的文件隔离在不同的目录范围内,从而避免了同名文件的冲突问题。同样道,它们将同名的文件隔离在不同的目录范围内,从而避免了同名文件的冲突问题。同样道理,假如当前目录是理,假如当前目录是C:windows,使用该目录下的,使用该目录下的test.txt不必指明目录名,但要使用不必指明目录名,但要使用C:mydata下的下的test.txt,就必须使用目录名,就必须使用目录名C:mydata。理解这些对后面命名空间的使用非。理解这些对后面命名空
3、间的使用非常有益。常有益。第3页,本讲稿共39页 namespace 命名空间名命名空间名命名空间名命名空间名 /有名的命名空间有名的命名空间 namespace /无名的命名空间无名的命名空间 命名空间的形式命名空间的形式命名空间的形式命名空间的形式第4页,本讲稿共39页在两个头文件中分别定义一个有名字的命名空间,其中各有一个类在两个头文件中分别定义一个有名字的命名空间,其中各有一个类StringString,但它分属不同的命名空间,即分别变成了,但它分属不同的命名空间,即分别变成了one:String()one:String()以以two:Stringtwo:String()()。这样,就
4、可以通过声明命名空间来区分不同的类或函数等等了。这样,就可以通过声明命名空间来区分不同的类或函数等等了。【例例11.111.1】有名的命名空间的简单定义有名的命名空间的简单定义/two.hnamespace two class String .;/one.hnamespace onechar func(char);class String .;第5页,本讲稿共39页namespace Outer/命名空间Outer的定义 int i;/Outer的成员i在内部定义 namespace Inner/子命名空间Inner的内部定义 void f()i+;/Inner的成员f()的内部定义,其中的i
5、为Outer:i int i;void g()i+;/Inner的成员g()的内部定义,其中的i为Inner:i void h();/Inner的成员h()的声明 /Inner定义的结尾 void f();/命名空间Outer的成员f()的声明/Outer定义的结尾void Outer:f()i-;/命名空间Outer的成员f()的外部定义void Outer:Inner:h()i-;/命名空间Inner的成员h()的外部定义【例例11.211.2】命名空间的成员在外部定义命名空间的成员在外部定义第6页,本讲稿共39页【例例11.311.3】无名命名空间的定义无名命名空间的定义namespac
6、e /注意是无名命名空间!int i;void f()/*/int main()i=0;/可直接使用无名命名空间中的成员i f();/可直接使用无名命名空间中的成员f()由于命名空间没有名字,在其它文件中自然就没法使用,它只在本文件的作用域内有效。第7页,本讲稿共39页【例例11.411.4】命名空间的引用命名空间的引用对命名空间中成员的引用,需要使用命名空间的作用域限定运算符:/out1.cpp#include out.h#include int main()Outer:i=0;Outer:f();/Outer:i=-1;Outer:Inner:f();/Outer:i=0;Outer:In
7、ner:i=0;Outer:Inner:g();/Inner:i=1;Outer:Inner:h();/Inner:i=0;std:cout Hello,World!std:endl;std:cout Outer:i=Outer:i ,Inner:i=Outer:Inner:i std:endl;第8页,本讲稿共39页命名空间的使用规则命名空间的使用规则在本例中,有一个标识符std,即标准库的意思。标准C+库(不包括标准C库)中所包含的所有内容(包括符号常量、变量、结构、类和函数等)都被定义在命名空间std(standard)中。1、对偶尔使用的命名空间成员,一般使用命名空间的作用域限定运算符
8、(:)来直接给名称定位。2、对一个大命名空间中的经常要使用的少数几个成员,提倡使用using声明,而不应该使用using编译指令。3、对需要反复使用同一个命名空间的许多数成员时,使用using编译指令,才被认为是可取的。第9页,本讲稿共39页如果要使用C标准程序库的任何标识符时,可以有三种方式:1)直接指定标识符)直接指定标识符 std:cout std:hex 3.4 std:endl;2)使用)使用using关键字关键字using std:cout;using std:endl;cout std:hex 3.4 endl;3)使用)使用using namespace std std内定义的
9、所有标识符都有效、可见,就好像它们被声明为全局变量一样。命名空间的使用规则命名空间的使用规则第10页,本讲稿共39页命名空间的别名命名空间的别名 标准C+引入命名空间,主要是为了避免成员的名称冲突。如果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。所以C+中提供了一种为命名空间取别名的方式来解决上述两难问题。格式为:namespace 别名别名=命名空间名命名空间名;第11页,本讲稿共39页【例例11.511.5】命名空间别名的使用命名空间别名的使用namespace East
10、_China_JiaoTong_University/命名空间名太长 class String String(const char*);/East_China_JiaoTong_University:String s1 /虽易记但不方便!=new East_China_JiaoTong_University:String();namespace ECJTU=East_China_JiaoTong_University;/取别名ECJTU:String s2=new ECJTU:String(Beijing);/使用方便第12页,本讲稿共39页C C与与C+C+的头文件的引用方式的头文件的引用方
11、式 在C+的程序代码开头部分,我们经常看到两种写法:第一种:#include 第二种:#include using namespace std;这是使用了两种包含头文件的方法。在程序中如果要使用某个函数,就必须在程序形状部分包含相应的头文件。第13页,本讲稿共39页在C+中使用头文件的两种方法:1)C语言的方式语言的方式 头文件名包含含.h后缀。由于C语言没有命名空间,所以在编程时如果要用包含.h的头文件时,不必用命名空间。2)C+的方式的方式 标准C+要求系统提供的头文件不包含后缀不包含后缀.h。但C+从C语言继承了很多有用的函数,且兼容C语言,为了表示它与C语言的联系与区别,C+的头文件名
12、是在C语言的相应头文件名(不含.h)前加上c。如如如如C C中的中的中的中的math.hmath.h,在,在,在,在C+C+中应该为中应该为中应该为中应该为cmathcmathC C与与C+C+的头文件的引用方式的头文件的引用方式第14页,本讲稿共39页 二、异常处理 程序在运行过程中由于使用环境的变化以及用户的操作而产生的错误,称为异常异常。对这些错误,应用程序如果不能进行合适的处理,将会使程序变得非常脆弱,甚至不可使用。因此,对于这些可以预料的错误,在程序设计时,应编制相应的预防代码或处理代码,以便防止异常发生后造成严重后果。一个应用程序,既要保证其正确性,还应有容错能力,在C+中,提供了
13、一种异常处理的机制与一套方法。第15页,本讲稿共39页异常处理的基本思想 在底层发生的问题,逐级上报,直到有能力可以处理异常的那级为止。在底层发生的问题,逐级上报,直到有能力可以处理异常的那级为止。即在应用程序中,若某个函数发现了错误并引发异常,这个函数就将该异常向上级调用者传递,请求调用者捕获该异常并处理该错误。如果调用者不能处理该错误,就继续向上级调用者传递,直到异常被捕获错误被处理为止。如果程序最终没有相应的代码处理该异常,那么该异常最后被C+系统所接受,C+系统就简单地终止程序运行。如下:func1()func2()func3()func4()异常处理异常处理 引发异常 所以说,C+异
14、常处理的目的,是在异常发生时,尽可能地减少破坏,周密地处理善后,而不去影响程序其他部分的运行。第16页,本讲稿共39页 异常处理的过程把可能会产生异常的语句或语句块放在try语句块中。程序尝试运行这些语句,一旦它们在运行中产生了异常,那么程序不会被终止,而是转入异常处理程序,根据我们的意愿继续运行下去。1)定义异常(try语句)try 2)抓住异常(catch语句)第17页,本讲稿共39页 将异常处理的语句放在catch语句块中,以便异常被传递来时处理。通常,异常处理是放在异常处理是放在try语句块后的由若干个语句块后的由若干个catch语句组成的程序块中,语句组成的程序块中,且每个且每个tr
15、y语句后面必须至少有一个语句后面必须至少有一个catch语句。语句。异常处理的过程catch(异常类型声明1)catch(异常类型声明2)catch(异常类型声明n)异常处理语句块n 第18页,本讲稿共39页 如果在try语句块中发现了异常,且抛出了该异常,则这个异常就可以被某个catch语句所捕获并处理,捕获和处理的条件是被抛出的异常类型捕获和处理的条件是被抛出的异常类型与与catch语句的异常类型相匹配。语句的异常类型相匹配。由于C+使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义,而表达式的类型就特别重要。异常处理的过程3)抛出异常(throw语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 命名 空间 异常 处理 优秀 课件
限制150内