分类: C/C++
2007-09-12 03:30:25
1、C++中的命名空间
与Java中的package类似,C++也有关键字namespace来将多个函数或者类型封装在一起加以管理。
名字空间的产生与一个类的产生非常相似。如
namespace MyLib {
//declarations
}
namespace与class、struct、union、enum有着明显的区别:
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();
}