c++之命名空间namespace
1命名空间解决全局变量的冲突
1 main.h文件 2 #pragma once 3 // data命名空间的名称 4 namespace data 5 { 6 int num = 20;//外部全局变量冲突 7 } 8 9 10 main.cpp 11 #include"main.h" 12 #include<iostream> 13 using namespace std; 14 15 int num = 10; 16 17 void main() 18 { 19 cout << num << endl; 20 cout << data::num << endl;//::域作用符 此处必须使用域作用符 21 22 cin.get(); 23 }
2命名空间没有私有,全部变量,函数都是公有,可以访问
using namespace data;//使用命名空间,直接访问当作全局变量
内层覆盖外层,
::num 直接访问全局变量,全局变量不存在就是0
使用命名空间必须在定义之后
#include<iostream> using namespace std; //命名空间没有私有,全部变量,函数都是公有,可以访问 //using namespace data;//使用命名空间,直接访问当作全局变量 //内层覆盖外层, //::num 直接访问全局变量,全局变量不存在就是0 //使用命名空间必须在定义之后 namespace data { int num; void show() { cout << num << endl; } } using namespace data;//使用命名空间,直接访问当作全局变量 //内层覆盖外层, namespace dataX { int num=100; namespace run { int num = 10; void show() { //::num 直接访问全局变量,全局变量不存在就是0 cout << dataX::num << endl; } } } using namespace dataX;//使用命名空间必须在定义之后 void main() { dataX::run::show(); cin.get(); } void main1x() { data::num = 10; show(); cin.get(); }
3命名空间的使用
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 5 6 namespace string1 7 { 8 char str[10]{ "calc" }; 9 } 10 namespace string2 11 { 12 char str[10]{ "notepad" }; 13 } 14 //命名空间拓展,名称相同,同一个命名空间 15 //瀑布式开发 16 namespace string2 17 { 18 char cmd[10]{ "notepad" }; 19 void show() 20 { 21 cout << str << endl; 22 } 23 } 24 25 //命名空间,可以无限嵌套 26 namespace run 27 { 28 namespace runit 29 { 30 namespace runitout 31 { 32 int num = 100; 33 void show() 34 { 35 cout << num << endl; 36 } 37 } 38 } 39 40 } 41 42 43 void main() 44 { 45 //system(string2::str); 46 //string2::show();//命名空间的函数与变量 47 run::runit::runitout::num = 199; 48 run::runit::runitout::show(); 49 50 51 52 system("pause"); 53 }
4匿名命名空间
1 #include<iostream> 2 3 using namespace std; 4 5 6 //匿名命名空间等同全局变量 7 namespace 8 { 9 int x = 10; 10 } 11 12 13 void main() 14 { 15 x = 3; 16 cout << x << endl; 17 18 19 cin.get(); 20 21 }