命名空间和模块化编程3

命名空间:

  地球人都知道,创建的每一个类、函数和变量都只能在一定的区域内使用。而我们所知道最大的区域是全局作用域,最小的区域是一个代码块,例如:

{
    int a = 20;  
}
//a在此处已经不存在

  随着程序变得越来越复杂,全局作用城里的东西会越来越多,尤其是在使用外部函数库时。
  这可能会演变成一个问题:因为没有两样东西可以有同样的名字。
  解决方案之一是给每个变量、函数和类等取一个独一无二的名字,但这可能很困难或很麻烦(因为随着一个程序代码量的逐步增加,一个变量名可能会变成像"CountOfItemsInTheArray"酱紫才能不重复)。

  这时候正是“命名空间”(namespace)的用武之地!
  命名空间其实就是由用户定义的范围,同一个命名空间里的东西只要在这个命名空间有独一无二的名字就行了。
  因此,如果某个程序有许多不同的头文件或已编译文件,它们又各自声明了许多的东西,命名空间可以为它们提供保护。

  创建命名空间的办法很简单,先写出关键字namespace,再写出这个命名空间的名字,然后把这个命名空间里的东西全部括在一对花括号里就行了,如下所示:

namespace myNamespace
{
    //全部东西
}

 

  注意在最末尾不需要加上分号哦。

  正如我们刚才讲过的那样,命名空间可以让你随用同一个标识等而不会导致冲突:

namespace author
{
    std:string person;
}

namespace programmer
{
    std:string person;
}

  代码示例:http://www.runoob.com/cplusplus/cpp-namespaces.html

 

使用命名空间:

  如果某个东西是在命名空间里定义的,程序将不能立刻使用它。
  这正是命名空间的全部意义所在:把东西放在它们自己的小盒子里,不让它们与可能有着相同名字的其他东西发生冲突。
  想要访问在某个命名空间里定义的东西,有三种方法可供选择。

  1. 第一种方法我们已经用了很多遍了:
    std:: cout << "I love fishc. com!\n" ;
  2. 第二种方法是使用using指令:

    using namespace std;
    

    执行这条语句后,在std命名空间里定义的所有东西就都可以使用,我们便可以像下面直接使用:

    cout<<"I love fishc.com"
    

    不过,把命名空间里的东西带到全局作用域里,跟我们使用命名空间的本意相违背!所以不建议使用这种设计风格。  

  3. 最后一种方法是用一个using指令只把你需要的特定命名从命名空间提取到全局作用域:

    using std::cout;
    cout<<"I love fishc. com!\n";
    

    最后请务必注意:using指令的出现位置决定着从命名空间里提取出来的东西能在哪个作用域内使用。如果你把它放在所有函数声明的前面,他将拥有全局性,如果你把它放在某个函数里,那么它将只在这个函数里可以使用。  



 

 

posted @ 2019-03-08 18:20  耐烦不急  阅读(271)  评论(0编辑  收藏  举报