Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364283
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: C/C++

2007-09-12 03:30:25

1C++中的命名空间

 

Java中的package类似,C++也有关键字namespace来将多个函数或者类型封装在一起加以管理。

   名字空间的产生与一个类的产生非常相似。如

namespace MyLib {

   //declarations

}

namespaceclassstructunionenum有着明显的区别:

1)   namespace只能在全局范畴定义,但他们之间可以互相嵌套;

2)   namespace定义的末尾,右大括号的后面不必要跟一个分号;

3)   一个namespace可以在多个头文件中定义,就好像重复定义一个类一样;多个定义中的函数或者类型合在一起构成整个namespace

4)   一个namespace可以用另一个名字来作为别名。使用namespace Tom=MyLib;即可。

5)   我们不能像类那样创建一个namespace的实例。

每个编译单元中(源文件等)都可以包含一个未命名的名字空间―――在namespace后面没有标识符。要保证每个编译单元只有一个未命名的名字空间。

   另外可以在名字空间的类定义之内插入一个friend声明,如:

       namespace me{

           class us{

//…

static int i;

void hello();

friend you();

};

}

这样函数you()就成了名字空间me的一个成员。

 

2、使用命名空间

   可以用两种方法在一个命名空间中引用同一个名字:一种是范围分解运算符,如me::us::i;另一种是用using关键字,可以使用using引入整个名字空间或者只引入名字空间中的具体函数等。如:

      namespace U{

          void f();

          void g();

}

 

namespace V{

    void f();

    void g();

}

 

void func(){

   using namespace U;

  using V::f;

  f(); //call V::f();

  U::f();

}

阅读(823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~