/*************** namespce命名空间主要用途 ***********************/
// 1.用来解决命名冲突的问题
// 2.命名空间下可以存放函数,变量,结构体,类;
// 3.命名空间必须定义在全局作用域下,不能定义在局部中
// 4.命名空间可以嵌套命名空间
// 5.命名空间是开放的。可以随时向空间中添加新的成员 采用合并策略
// 6.命名空间可以是匿名的,没有空间名,相当于全局变量
// 7.命名空间可以取个别名
举例:
有两个头文件,分别为game1.h 和game2.h,都定义了一个名叫goAtk()的方法。
有两个源文件都各自实现了game1.h和game2.g的goAtk()方法
在main方法中将两个头文件都引入,并调用goAtk()方法,此时运行即将报错:
game1.h
#include<iostream>
using namespace std;
//LOL
//攻击函数
namespace LOL
{
void goAtk();
}
game2.h
#include<iostream>
using namespace std;
//KingGlory
//攻击函数
namespace KingGlory
{
void goAtk();
}
game1.cpp
#include"game1.h"
void LOL::goAtk()
{
cout << "LOL的攻击实现" << endl;
}
game2.cpp
#include"game2.h"
void KingGlory::goAtk()
{
cout << "王者荣耀的攻击实现" << endl;
}
/*************** namespce命名空间主要用途 ***********************/
// 1.用来解决命名冲突的问题
// 2.命名空间下可以存放函数,变量,结构体,类;
// 3.命名空间必须定义在全局作用域下,不能定义在局部中
// 4.命名空间可以嵌套命名空间
// 5.命名空间是开放的。可以随时向空间中添加新的成员 采用合并策略
// 6.命名空间可以是匿名的,没有空间名,相当于全局变量
// 7.命名空间可以取个别名
#define _CRT_SECURE_NO_WARINGS
#include<iostream>
using namespace std;
#include"game1.h"
#include"game2.h"
// 2.命名空间下可以放函数,变量,结构体,类;
// 4.命名空间可以嵌套命名空间
namespace A
{
int m_A1 = 10;
void func() {};
struct person {};
class Animal {};
namespace B
{
int m_A = 20;
}
}
namespace A
{
int m_A2 = 100;
}
namespace
{
int m_C = 100;
int m_D = 200;
}
namespace veryLongName
{
int m_E = 1001;
}
void test01()
{
//namespace B;
LOL::goAtk();
KingGlory::goAtk();
cout << "A空间下的M_A1=" << A::m_A1 << endl;
cout << "A空间下的M_A2=" << A::m_A2 << endl;
cout << "B空间下的M_A=" << A::B::m_A << endl;
cout << "m_C=" << m_C << endl;
cout << "m_D=" << ::m_D << endl;//全局作用域计算符
}
void test02()
{
namespace VLN = veryLongName;//将命名空间的名字缩短
cout << "m_E=" << veryLongName::m_E << endl;
cout << "m_E=" << VLN::m_E << endl;
}
int main()
{
test01();
test02();
system("pause");
return 0;
}