c++命名空间

来源:互联网 发布:steam mac windows 编辑:程序博客网 时间:2024/06/06 17:58
    命名空间主要解决命名冲突的问题。命名空间有程序员自己来存放任何东西,包括类、对象、函数、结构体等。下面简单的一个程序来说明命名冲突的问题。
int x =5;//自己单独的一个文件 "定义.h"



#include<iostream>#include "定义.h"using std::cout;using std::endl;int x=3;int main(){cout<<x<<endl;return 0;}




执行的结果:



由于定义了两个x,所以编译器不知道输出哪个,造成了命名冲突。

下面在来一个程序,说明如何使用命名空间:

#include<iostream>namespace func{const int cx = 20;const int cy = 50;class num{public:num();~num();void size(int a,int b);void swap(int rx,int ry);void compare(int ax,int ay);int returnX();int returnY();static int z;private:int x;int y;};}int func::num::z = 0;func::num::num(): x(0),y(0){}func::num::~num(){std::cout<<"析构函数执行...\n";}void func::num::size(int a,int b){if(a < func::cx && a > 0){x = a;}if(b< func::cx && b > 0){y = b;}}void func::num::swap(int rx,int ry){using std::cout;int temp;cout<<"交换前x 的值为:"<<rx<<"  y的值: "<<ry<<"\n";temp = rx;rx = ry;ry = temp;cout<<"交换后x 的值为:"<<rx<<"  y的值: "<<ry<<"\n";}void func::num::compare(int ax,int ay){using std::cout;if(ax < ay){cout<<"x 比y 小\n";}elseif(ax == ay){cout<<"x 等于y\n";}elsecout<<"x 大于y\n";}int func::num::returnX(){using std::cout;return x;}int func::num::returnY(){using std::cout;return y;}int main(){func::num num;num.size(14,15);num.compare(num.returnX() , num.returnY());num.swap(num.returnX() , num.returnY());std::cout<<"静态变量z的值为: "<<func::num::z<<"\n";return 0;}
程序执行的结果是:


一、虽然很多代码都使用了using namespace std;

但这样做恰好与设置命名空间的初衷是相违背的,因为所有的名字都从命名空间中释放出来了。应该尽量避免使用using namespace std;而是采用std::out 、std::cin的形式。

二、尽量在命名空间之外定义函数,命名空间的成员都是共有的。


PS:博文匆匆,有不正确的地方,谢谢指正。




原创粉丝点击