cpp_8.pptVIP

  • 8
  • 0
  • 约4.42千字
  • 约 15页
  • 2016-11-28 发布于河南
  • 举报
cpp_8

第一章 C++的初步知识 第二章 类和对象 第三章 再论类和对象 第四章 运算符重载 第五章 继承与派生 第六章 多态性与虚函数 第七章 输入输出流 第八章 C++工具 8.1 异常处理 8.2 命名空间 8.3 使用早期的函数库 8.1 异常处理 异常处理的任务 程序可能按编程者的意愿终止,也可能因为程序中发生了错误而终止。例如,程序执行时遇到除数为0或下标越界,这时将产生系统中断,从而导致正在执行的程序提前终止。 程序的错误有两种,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。 8.1 异常处理 异常处理的方法 C++语言异常处理机制的基本思想是将异常的检测与处理分离。当在一个函数体中检测到异常条件存在,但无法确定相应的处理方法时,将引发一个异常,并由函数的直接或间接调用检测并处理这个异常。这一基本思想用3个保留字实现:throw、try和catch。其作用是: (1)try:标识程序中异常语句块的开始。 (2)throw:用来创建用户自定义类型的异常错误。 (3)catch:标识异常错误处理模块的开始。 8.1 命名空间 本课程的各章节的程序中,都用到了这样的语句: using namespac std; 这就是命名空间std。 为什么需要命名空间?C语言定义了3个作用域,即文件域,函数域和复合语句域。C++又引入了类作用域。 不同的作用域中可以用相同的变量名,互不干扰。但是,如果是在不同的库文件( *.h )中,有相同的变量名和类名,而不巧又在被一个程序包含、主文件中又调用了该变量,定义了该类对象,于是引起矛盾冲突。 8.1 命名空间 什么是命名空间?为了解决这个问题,ANSI C++增加了命名空间的概念。简单地说,就是ANSI C++引入的,可以由用户命名的内存区域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。比如: namespace nsl { int a; double b; } 其中: namespace 是定义命名空间的关键字; nsl 是用户指定的空间名。 花括号内包含的a,b,是命名空间成员。 8.1 命名空间 注意a 和b 仍然是全局变量,仅仅把它们隐藏在命名空间中,而程序中如果要使用变量a 和b,必须加上空间名和域分辨符。如:nsl::a,nsl::b 等。这些名字称为被限定名。 C++中的命名空间和被限定名的关系,类似与操作系统中文件夹和其中文件的关系。 命名空间的作用:是建立一些互相分隔的作用域,把一些全局实体分割开来,以免产生名字冲突。命名空间中的被限定名可以是: 常量和变量( 可以带有初始化 ); 函数( 可以是定义或声明 ); 结构体或类; 模板或另一个命名空间( 意味着,命名空间可以嵌套 ) 8.1 命名空间 使用命名空间解决名字冲突:我们举例说明如何解决冲突。 8.1 命名空间 两个头文件中有相同名字的类和函数,分别放在不同的命名空间中,避免冲突。 定义对象时,要使用: 空间明::类名 对象名(参数表) 的形式来定义对象。 定义好的对象不在命名空间中,而在main 函数的范围里,所以使用对象时,不能加空间的名字! 8.1 命名空间 使用命名空间的简化形式:如果在一个命名空间中定义了至少10个实体,就需要至少使用10次 using 命名空间名。能否简化呢?可以。 C++提供 using namespace 语句来实现简化。其一般形式为: using namespace 命名空间名; 例如, using namespace ns1; 声明了在本作用域中要用到命名空间ns1 中的成员,在使用该命名空间的任何成员时,都不必使用 ns1 空间名来限定。好象全局对象一样。如果紧接上面的声明,有如下语句: student stud1(101, Wang,18); 则是指定义一个ns1空间中的 student 类对象。 注意,这种简化方法只能是使用少量的命名空间,并且不至于产生冲突的情况下,才能简化。如上一个示例中,ns1和ns2命名空间就不能简化,因为会引起冲突。 8.1 命名空间 无名的命名空间:C++允许使用没有名字的命名空间,如: namespace { void fun( ) { coutOK!endl; } } 这种无名的名字空间在其他文件中无法引用,只能在本文件的作用域内有效。无名空间中的成员,如上面提到的函数 fun 的作用域是从定义位

文档评论(0)

1亿VIP精品文档

相关文档