理解namespace与include的关系

betball贝博app C++ 508 次浏览 没有评论

初学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,就可以更灵活的使用了。

发表评论

邮箱地址不会被公开。

Go