定义
命名空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。例如:
namespace proj_alpha
{
//下面是命名空间 proj_alpha 的成员
class Spy {/*..*/};
void encrypt (char *msg);
const int MAX_SPIES = 8;
}
类声明
在使用C++类的时候,常常会用到命名空间,在使用的时候一般需要前置声明。例如:
//SpaceA header file
#pragma once
namespace TestA {
class SpaceA {
public:
SpaceA();
~SpaceA();
void print();
};
}
//SpaceA cpp file
#include "SpaceA.h"
using namespace TestA; //必须有前置声明
SpaceA::SpaceA() {
}
SpaceA::~SpaceA() {
}
void SpaceA::print() {
int i = 0;
i++;
}
如果命名空间定义的类成员中包含其他命名空间的类,使用的时候,必须加上命名空间。例如:
//SpaceB header file
#pragma once
//在使用之前声明一下
namespace TestA {
class SpaceA;
}
namespace TestB {
class SpaceB {
public:
SpaceB();
~SpaceB();
void printB();
private:
TestA::SpaceA* a;//使用的时候,必须加上命名空间
};
}
//SpaceB cpp file
#include "SpaceB.h"
#include "SpaceA.h"
using namespace TestB;
using namespace TestA;
SpaceB::SpaceB() {
a = new SpaceA;
}
SpaceB::~SpaceB() {
}
void SpaceB::printB() {
int i = 9;
i++;
a->print();
}
主函数中定义方式:
#include "SpaceB.h"
using namespace TestB;
int main(int argc, char *argv[]){
SpaceB b;
b.printB();
}
函数模板
命名空间中定义函数模板,实例如下:
//compare header file
namespace compare{
template<class T> T max(const T* data,int size){
T result =data[0];
for(int i=1;i<size;i++)
if(result<data[i])
result=data[i];
return result;
}
template <class T> T min(const T* data,int size){
T result =data[0];
for(int i=1;i<size;i++)
if(result>data[i])
result=data[i];
return result;
}
}
主函数调用方式:
#include <iostream>
#include "compare.h"
using compare::max;
using compare::min;
//可以用下面指令的代替上面的声明
// using namespace compare;
using std::cout;
using std::endl;
int main(){
double data[]={1.2,3.3,5.4,2.6,4.7,6.8};
const int dataSize=sizeof data/sizeof data[0];
cout <<"Min double is "<<min(data ,dataSize)<<endl;
cout<<"Max double is "<<max(data,dataSize)<<endl;
return 0;
}
参考文章
本文参考了如下几篇文章:
C++在命名空间中声明类和成员函数
C++在命名空间中使用函数模板
带有命名空间的C++类的前置声明