std::cout << "namaspace test" << std::endl;//如果不写需要显式的写出类的关系
return 0;}//定义命名空间namespace NameSpaceA{int a = 10;//定义了一个命名空间,有一个变量a,赋值为10}namespace NameSpaceB{int a = 20;//定义了一个不同的命名空间,也有一个变量a,赋值为20}//因为两个命名空间不一样所以就算空间中定义的标识符一样也没有关系namespace NameSpaceC{namespace NameSpaceD{ class Teacher{public:int age;string name;//因为用到了string所以要加头文件}; }//命名空间可以嵌套,不光可以定义变量,也可以定义类和结构体}void main(){using namespace NameSpaceA;//使用NameSpaceA //输出的a 为10 //同理使用NameSpaceB 输出的a 为20using namespace NameSpaceB;//但是同时都使用时a就回报错,因为不知道是A的a还是B的a,所以有必要时还需要用显式cout << NameSpaceB::a << endl;//隐式using namespace NameSpaceC::NameSpaceD;//注意因为D是嵌套在C里面的所以直接using D是出不来的Teacher t1;//因为teacher是D里面定义好的类所以可以直接创建对象t1.name = "张三";cout << t1.name << endl;//显式NameSpaceC::NameSpaceD::Teacher t2;//显式使用命名空间创建对象t2.name = "李四";cout << t2.name << endl;}
//总结:
(1)当使用<iostream>的时候,改头文件没有定义全局的命名空间,必须使用namespace std 这样才能使用cout。若不引入using namespace std, 需要std::cout。
(2)C++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀 .h 。(因为iostream.h是老版本,速度慢)
(3)C++命名空间的定义:namespace name{.....}
(4)using namespace NameSpaceA(命名空间的使用)
(5)namespace 定义可以嵌套
新闻热点
疑难解答