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