命名空间 == 区域声明。为类型、函数、变量提供一个作用域限制。
防止项目多文件集成,出现同名的错误异常。
1、声明和访问
关键字namespace
命名空间声明 在头文件内部
CPP文件实现
/**
* *****
* ***** 命名空间声明 、头文件内部
* *****
* *****
*/
namespace BaiduData
{
class ObjectManger
{
private:
/* data */
public:
void DoSomething();
};
//命名空间内,类外
void Func(ObjectManger);
}
命名空间访问:
/**
* CPP文件内
*/
访问方法1 :直接通过限定符使用,完全限定。
BaiduData::ObjectManger mgr;//声明一个对象
mgr.DoSomething();
BaiduData::Func(mgr);
访问方法2: 通过关键字using 提前引入部分命名空间内容
//意为出现ObjectManger 则替换为BaiduData::ObjectManger
//但是注意,func函数为类外函数,所以无法使用。
using namespace BaiduData::ObjectManger;
ObjectManger mgr;
mgr.DoSomething();
访问方法3: 通过using 将该命名空间所有内容引入
using namespace BaiduData;
ObjectManger mgr;
mgr.DoSomething();
Func(mgr);
//备注: using使用一般在cpp文件顶部,尽量避免放在头文件内部。
2 命名空间实现和声明
两个例子:基本宗旨--》完全限定
//声明
//test BaiduData.h
#pragma once
namespace BaiduData
{
void Foo();
int Bar();
}
//实现方式1 实现的时候前面加完全限定
//test BaiduData.cpp
#include BaiduData.h
using namespace BaiduData;
void BaiduData::Bar(){
//...
}
//实现方式2 这种实现方式是比较适合大项目使用。
#include BaiduData.h
namespace BaiduData{
void Bar(){...}
void Foo(){...}
}
方法2 也适合类的使用,比如
头文件声明
//BaiduData.h
namespace BaiduData {
class baidudata{
b public:
void Far();
}
}
//拓展一个头文件可以增加多个类的声明
namespace BaiduData {
class baidudata{
public:
void Far();
}
class baidudata2{
public:
void Far2();
}
}
具体实现
#BaiduData.cpp
//正常类的实现外套一个命名空间
namespace BaiduData{
baidudata::baidudata(){};//构造
baidudata::~baidudata(){};//析构
void baidudata:: Far(){... return };//具体方法
baidudata2::baidudata2(){};//构造
baidudata2::~baidudata(){};//析构
void baidudata2:: Far2(){... reutrn };//具体方法
}