文章目录

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

定义

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

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

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

  1. abstract类中不可以有private的成员_C++ 类:声明成员函数与实现

    接上文... 16.3类的成员 2.成员函数 1.构造函数 ... 2.拷贝构造函数 有了类的构造函数我们就可以创建类的实例了,下图中分别使用不同的构造函数一共创建了4个动物的对象,现在程序中就有4个 ...

  2. 类中成员函数声明后面的const的含义

    这个const一般是对类中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了.这个声明表示这个函数不会修改类中的任何数据成员.如果在编写const成员函数时 ...

  3. c++类的成员函数作回调函数为啥要声明为static的

    简单说明 C++的类成员函数不能像普通函数那样用于回调,因为每个成员函数都需要有一个对象实例去调用它. 把成员函数作为回调函数,可以把该成员函数声明为静态成员函数,但这样做有一个缺点,就是会破坏类的结 ...

  4. C++的成员函数声明与定义 —— 类外定义成员函数以及inline函数

    作者原文:https://www.cnblogs.com/wuchanming/p/4061654.html 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它 ...

  5. 把类的成员函数声明为友元函数,但不能访问私有成员的原因和解决办法

    定义类X,类Y,在类X中声明类Y的成员函数g()为类X的友元函数 常见的几种错误写法及原因: 错误写法1 class Y; class X {public:X(int i) :i(i) {}frien ...

  6. [原创]Enterprise Architecture V7.5 C++代码生成时,头文件中函数声明没有注释,CPP中函数定义却有注释。...

    这几天一直在用Enterprise Architecture来抽象项目中要用到的一些数据结构和类,然后都做得差不多了之后发现,生成代码的时候.h文件中类成员函数部分没有注释,但是.cpp文件中的函数定 ...

  7. 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数

    虚函数:类成员函数前面添加virtual关键字,则该函数被称为虚函数. 纯虚函数:在虚函数的基础上,在函数末尾加上 = 0. class Animal {public: virtual void Sh ...

  8. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  9. 函数声明末尾的“ const”是什么意思? [重复]

    本文翻译自:What is meant with "const" at end of function declaration? [duplicate] This question ...

  10. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明

    使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明 分类: 小技巧 Win32编程 C++ 解决难题 .NET2009-02-05 20:53 5186人 ...

最新文章

  1. PyTorch图像分类从模型自定义到测试
  2. doc2vec介绍和实践
  3. Angel Borja博士教你如何撰写科学论文一:Six things to do before writing your manuscript
  4. Maximum Subsequence Value CodeForces - 1365E(规律+暴力)
  5. java实现自动登录_java实现用户自动登录
  6. 折腾AX2012,安装成功,发帖庆祝
  7. 百度文库下载器Python实现
  8. 汇编语言程序设计实验三
  9. Linux下安装HP打印机的驱动程序
  10. PayPal 更换汇率结算方式 降低手续费,PayPal汇率结算 改为 银行汇率结算
  11. HDUOJ 4565 So Easy!
  12. pixhawk编译环境搭建--2018.4.25
  13. Go专家编程 timer、ticker
  14. samba 本地设备名已在使用中 此连接尚未恢复
  15. DBCA启动问题 (linux)
  16. WY的Java学习笔记(1)基础
  17. 调节睡眠周期(有助睡眠)
  18. php链接mysql 老是die_php连接MySQL时, 为什么die(错误信息: . $conn-connect_error) 不返回错误信息?...
  19. 优秀opengl网站(转)
  20. 这不是你想象中的软件产业

热门文章

  1. Kali Linux 基于Easy File Sharing Web Server 6.9 编写漏洞渗透模块 (上)
  2. 基于微信小程序的在线考试系统【毕业设计源码】
  3. 【独家】这两个人的对决,决定了万科股权大战的走向
  4. python实现局域网文件互传_Python+pyftpdlib实现局域网文件互传
  5. 计算机主机不启动的故障,电脑不能正常启动的原因及解决方法
  6. 关于android端打开附件(pdf,cad,office等)方式的调查探究
  7. excel如何设置保留两位小数
  8. 贩卖个人信息非法获利300余万,平安惠普、拍拍贷都是买方
  9. 计算机安装固态硬盘后启动不稳定,完美解决win7系统安装固态硬盘后开机慢的解决方法...
  10. Linux隧道isatap(sit模式)