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

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i胡说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值