多人代码的整合,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