首页 > 编程知识 正文

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

时间:2023-05-03 16:20:13 阅读:279531 作者:3881

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

定义

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。