第15章 命名空间的使用.pptVIP

  • 1
  • 0
  • 约2.23千字
  • 约 17页
  • 2016-11-28 发布于河南
  • 举报
第15章 命名空间的使用

第15章 命名空间的使用 在程序设计中,一个给定作用域中的名字必须是唯一的,不然就会出现冲突。然而在大型程序中,由于各种各样的关系,如相关库的调用,就会出现名字冲突。 这时命名空间就产生了,它防止了名字冲突,提供了可以控制的机制。 通过本章的学习,要了解下面的内容: 了解命名空间是如何定义的。 熟练掌握命名空间如何进行嵌套。 了解命命名空间的名别。 了解命名空间与重载的区别。 15.1 命名空间的定义 在使用命名空间之前必须对命名空间进行定义,而且每个命名空间还有一个作用域,只有正确地使用命名空间的作用域才能使程序保持正确。可以向命名空间中添加新的成员,当然也可以在命名空间外定义函数,就像是在命名空间中定义的一样。 15.1.1 命名空间的定义 在前面已经使用了命名空间,如std命名空间。下面为定义命名空间的格式: namespace 命名空间名字 { //命名空间的成员 } 15.1.2 命名空间的作用域 定义在命名空间中的实体称为该命名空间的成员。由于在同一作用域中,所以同一命名空间中的名字必须唯一。这样不同的命名空间就可以拥有相同的名字。如果要使用一个命名空间中的成员,可以如下使用: 命名空间名::成员; 15.1.3 添加新成员 在类定义完成之后,就不能在类中再定义新的成员,但命名空间可以。 15.1.4 在命名空间外定义函数 类可以在定义时声明成员,然后在类外定义成员,命名空间也可以这样做,不过在命名空间外定义函数时一定要给出函数是属于哪个命名空间的。下面通过实例来了解。 15.2 嵌套命名空间 与函数的嵌套一样,命名空间也是空间也可以嵌套,当然命名空间的嵌套与函数的嵌套有区别,这一节就学习嵌套的命名空间。在使用嵌套的命名空间时也会遇到与函数嵌套相同的问题,如外围的名字将被嵌套的名字所屏蔽等,所以在使用嵌套的命名空间时要防止在嵌套的命名空间外面使用嵌套命名空间中的名字。当然每个嵌套的命名空间也有一个作用域,这与函数的作用域相同。当然如果要使用嵌套命名空间中的名字怎么办呢?这时只要使用域作用操用符便可以实现。 15.2.1 如何嵌套定义名字空间 命名空间是否也可以嵌套呢?答案是肯定的,命名空间也能嵌套。下面为嵌套的命名空间的例子。 15.2.2 外围名字将被嵌套名字屏蔽 如果在A命名空间中定义了B命名空间,那么在B命名空间中声明的名字a将A命名空间中声明的名字a所屏蔽。下面通过实例来了解。 15.2.3 注意嵌套命名空间中名字的作用域 在嵌套的命名空间中定义的名字只能在嵌套的命名空间中使用,而不能在外围命名空间中使用。因为嵌套的命名空间具有一个作用域,在里面定义的名字不能在作用域外使用。通过下例了解嵌套命名空间中名字的作用域应该注意的问题。 15.2.4 外围命名空间也可以使用嵌套命名空间中的名字 前面通过把用于输出变量b的函数移到了嵌套的命名空间,所以程序能够正确的输出,如果一定要在外围的作用域中使用嵌套的命名空间中的名字怎么办呢?这时就可以使用完全限定名,告诉编译器在外围作用域中使用了嵌套命名空间中声明的变量。请看下面的例子。 15.3 命名空间别名 如果命名空间的名字非常的长,使用起来就非常的麻烦,这时便可以为较长的命名空间的名字起一个同义词。如print_Chinese_number,针对这样一个长的命名空间名字,便可以为其起一个别名printcnum,那如何实现这一过程呢? 15.4 未命名命名空间 前面使用的命名空间都有一个名字,就好比一个孩子出世之后,父母会给他起一个名字。然后命名空间还可以没有名字,这就是未命名的命名空间,本节将对未命名空间进行学习。将一组声明放在名字空间,可以防止名字冲突,使代码保持了局部性。 15.5 命空空间中设定名字的优先级 如果两个命名空间中定义了同样的名字,则在程序中要使用这两个命名空间,则可以通过限定符来指定名字,并优先使用指定的名字,如A和B两个命名空间同时定义了名字a,则可以使用A::a来指定程序中的名字a来自命名空间A。然后在前面加上using指令。下面通过实例来了说明。 15.6 命名空间与重载 在前面学习函数时,了解到函数可以进行重载,那命名空间可以进行重载吗?通过前面的学习己经了解到重载是发生在函数当中的,那么命名空间中当然就不能重载了,但是可以在命名空间中定义函数,然后在使用命名空间时根据实参调用相应的函数进行重载。本节对命名空间与重载进行讲解。 15.7 小结 本章学习了命名空间,由于本书为基础教程,所以只对命名空间作简单介绍。 首先,介绍了什么是命名空间以及它的作用域,知道了命名空间还可以添加新的成员,以及在命名空间中声明名字,然后在命名空间外定义名字。接着,介绍了嵌套的命名空间,命名空间可以跟语句一样实现嵌套,为了

文档评论(0)

1亿VIP精品文档

相关文档