您的位置:首页 > 编程语言 > C语言/C++

c++ 中的 namespace 用法 4000

2017-12-28 14:44 736 查看
多人代码的整合,namespace 还是非常有用的。可以很轻松的避免变量与函数一样的命名

1. namespace 在 单个头文件 中使用

下面给一个简单示例演示命名空间和自定义头文件的使用,代码如下:

compare.h:

namespace compare{
double max(const double* data,int size);
double min(const double* data,int size);
}


compare.cpp:

#include "compare.h"
double compare ::max(const double* data,int size){
double result=data[0];
for(int i=1;i<size;i++)
if(result<data[i])
result=data[i];
return result;
}
double compare ::min(const double* data,int size){
double result=data[0];
for(int i=1;i<size;i++)
if(result>data[i])
result=data[i];
return result;
}

test.cpp:

#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;
}


2. namespace 在源文件中使用

在这里继续演示一个完整的命名空间事例:

#include <iostream>
using namespace std ;
namespace savitch1
{
void greeting();
}
namespace savitch2
{
void greeting();
}
void big_greeting();
int main()
{
{
using namespace savitch2 ;
//使用savictch2、std、全局三个命名空间
greeting();
}
{
using namespace savitch1 ;
//使用savitch1、std、全局三个命名空间
greeting();
}
big_greeting();
//使用了std和全局两个命名空间

return0 ;
}
namespace savitch1
{
void greeting()
{
&nbnbsp; cout<<"Hellofromnamespacesavitch1.\n" ;
}
}
namespace savitch2
{
void greeting()
{
cout<<"Greetingsfromnamespacesavitch2.\n" ;
}
}
void big_greeting()
{
cout<<"ABigGlobalHello!\n" ;
}


3. 同一个 namespace 在 多个头文件 中使用

3.1 头文件相互独立

a.h

#include <iostream>

namespace hh
{
void aprintf(int m,int n);
}


a.cpp

#include <iostream>
void hh::aprintf(int m,int n)
{
print("this is by a: m=%d,n=%d \n",m,n);
}


b.h

#include <iostream>

namespace hh
{
void bprintf(int m,int n);
}


b.cpp

#include <iostream>
void hh::bprintf(int m,int n)
{
print("this is by b: m=%d,n=%d \n",m,n);
}


main.cpp

#include <iostream>
#include"a.h"
int main()
{
int m=10;
int n=20;
hh::aprintf(10,20); //这里仅仅有aprintf(),没有bprintf(),因为只包含了a.h头文件
return 0;
}

总结: namespace 中的方法,会根据头文件中定义的去查找!!!

同理1: 仅仅只包含 b.h 头文件, hh::只会出现bprintf()

同理2:若包主文件含两个 头文件(a.h,b.h),则aprintf() 与 bprintf() 都会出现

3.2 头文件之间嵌套

a.h

#include <iostream>
namespace hh
{
void aprintf(int m,int n);
}


a.cpp

#include <iostream>
void hh::aprintf(int m,int n)
{
print("this is by a: m=%d,n=%d \n",m,n);
}


b.h

#include <iostream>
#include"a.h"   ///////( b.h 中引用了 a.h )

namespace hh
{
void bprintf( );
}


b.cpp

#include <iostream>
void hh::bprintf()
{
int m = 200;
int n = 300;
hh::aprint(m,n);
}


3.2.1 主函数只用前半段(只包含最开始的.h文件)

main.cpp

#include <iostream>
#include"a.h"
int main()
{
int m=10;
int n=20;
hh::aprintf(10,20); //这里仅仅有aprintf(),没有bprintf(),因为只包含了a.h头文件
return 0;
}


总结: 若只包含最开始的.h文件,namespace找不到后边添加的成员!

3.2.2 主函数只用后半段(只包含最后的.h文件)

main.cpp

#include <iostream>
#include"b.h"
int main()
{
int m=10;
int n=20;
hh::aprintf(10,20);
hh::bprintf();       //两个都成员都会找到!!!!
return 0;
}


总结: 若只包含最后的.h文件,namespace可找到所有添加的成员!

3.3 总结

namespace可用的成员 都是根据头文件进行逐级向上查找的



第一部分参考: http://blog.csdn.net/u010142437/article/details/32332253
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: