初学C++,对于C语言中没有的一些新的概念感觉晕晕的。做了个实验测试一下命名空间和包含文件的具体区别。
做了个实验,工程里包含了5个文件:
namespace.cpp:
[cce_cpp] #include <iostream> #include "a.h" #include "b.h" //using namespace fun1; using namespace fun2; using namespace std; int main() { int a=0; cout<<fun_add(a)<<endl; cout<<fun1::fun_add(a)<<endl; return 0; } [/cce_cpp]
a.h:
[cce_cpp] namespace fun1{ #ifndef _A_H #define _A_H int fun_add(int); #endif // _A_H } [/cce_cpp] a.cpp
[cce_cpp] namespace fun1{ int fun_add(int num){ return num+1; } } [/cce_cpp]
b.h
[cce_cpp] namespace fun2{ #ifndef _B_H #define _B_H int fun_add(int); #endif // _B_H } [/cce_cpp]
b.cpp
[cce_cpp] namespace fun2{ int fun_add(int num){ return num+2; } } [/cce_cpp] 返回结果是:
[cce]
2
1
[/cce]
在C语言中已经了解到,#include的作用就是把文件直接粘贴到本文件的当前位置。
添加了#include,如果不加namespace的话,会提示找不到定义。很容易理解,有定义好的那么多命名空间,还没有调用呢,当然找不到。
using namespace以后,使用的哪个命名空间,后面就会出现哪一种结果。
如果只需要单次调用某一个命名空间的函数的话,就直接使用“空间名::函数名”就可以了
这样就可以实现对于不同的类型数据执行相似功能的操作。
比如说,时间相加和数量相加,都是加法,都是add函数。
定义一个时间空间,一个数量空间,时间空间里的add采用十进制,数量空间中的add采用十六进制。
然后用的时候,分别用time::add和number::add,就可以更灵活的使用了。