//test.h
namespace myname { typedef int cin ; } // fig19_01.cpp // demonstrating string assignment and concatenation #include //#include #include "test.h" using namespace std; using namespace myname; //自己命名的一个空间 int main() { //string s1( "cat" ), s2, s3; char *s1="cat", *s2, *s3; s2 = s1; s3 = s1; //s3.assign( s1 ); std::cout<< "s1:" << s1 << "\ns2:" << s2 << "\ns3:" << s3 << endl; cout<< "this is a test, using namespace std "<> i; //这样用就会产生错误 error C2872: 'cin' : ambiguous symbol std::cout << i; return 0; }
名词空间namespace
1) namespace只能在全局范畴定义,但它们之间可以互相嵌套。
2) 在namespace定义的结尾,右大括号的后面不必要跟一个分号。
3) 一个namespace可以在多个头文件中用一个标识符来定义,就好象重复定义一个类一样。
4)一个namespace的名字可以用另一个名字来作它的别名,这样我们就不必敲打那些开发商提供的冗长的名字了。比如说namespace alex = ThisIsAelxLongNamespace;
5) 我们不能像类那样去创建一个名字空间的实例
1.每个编译单元可以有一个没有命名的名词空间。
//cu.cpp
namespace{
class object{}...
}
2. 友元:可以在一个名字空间的类定义之内插入一个friend 声明,这个友元也属这个namespace
使用名词空间namespace
1.alex::Student::age=5;//象使用类一样使用namespace
2.使用using指令using namespace std;using namespace alex;using namespace chirs;
如果alex 和chirs都有一个love 函数的话,就会发生冲突,
3.使用using声明:
void func(){
using namespace alex;//using指令
using chris::love;//uisng声明
love();//chirs::love();
alex::love();//必须这么使用
}
using 和namespace都是C++的关键词。
std 是标准程序库所驻之命名空间(namespace)的名称。
如果使用Boost的库 ,那就写 using namespace boost;
如果使用C++ 标准库 那就写 using namespace std;
就是暴露std这个名字空间,你就可以调用std这个名字空间下的东西,包含在这个命名空间的所有类还有函数都可以使用了
一般的名字空间用法:
这样使用:
namespace sdm
{
int temp;
……
}
那么你在一个文件中有三种用法:
1> using namespace sdm;
然后你就可以使用变量temp:
temp=9;
还可以使用sdm中的其他每一个成员。
2>using sdm::temp;
在这个文件中只能使用sdm中的temp这个变量。
3>你在使用时直接使用sdm::temp:
cout<使用其它的成员也这样调用。
哈哈 using namespace这个东西 我觉得涉及到一种组织学 就是怎么把一堆代码归在一起,把它们纳入一个space(空间);然后使用它们的时候,先要声明使用它所在的这个空间
比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,不会叫错人 呵呵
感觉语言这东西,重名是最麻烦的,因为人类自身的限制,不能使用太复杂的来作为名字(变量名,函数名),所以很容易出现名字冲突,所以开发了名字空间这种机制来保证大家有足够的名字可以用 呵呵
具我的体会class(类)这种东西,也具有类似的作用,不同类的同名函数可以存在但不冲突,就是表现之一呀
namespace 就是一个名字的空间。是为了避免名字冲突而使用的。在不同的空间里可以使用同一个名字而不会引起名字冲突。
它的声明就像声明一个类一样。
例:
namespace A{
int f(){……};
char g(){……};
……}
在使用名字空间里函数的时候有几种方法:
1-就像声明一个类的成员函数一样,只是类名换成了空间名 A::f();
2-可以用using关键字 using namespace A; 这样以后的代码使用的就是名字空间A中的函数了。