C++命名空间中类声明、成员函数声明和函数模板

文章目录

  • 定义
  • 类声明
  • 函数模板
  • 参考文章


定义

命名空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。例如:

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 
#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++类的前置声明

你可能感兴趣的:(C/C++)