文章目录 定义类声明函数模板参考文章
定义
命名空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。例如:
namespace proj_alpha{//下面是命名空间 proj_alpha 的成员class Spy {/*..*/};void encrypt (char *msg);const int MAX_SPIES = 8;} 类声明在使用C++类的时候,常常会用到命名空间,在使用的时候一般需要前置声明。例如:
//SpaceA header file#pragma oncenamespace 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 filenamespace 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++类的前置声明