您的位置:首页 > 编程语言 > C语言/C++

C++命名空间

2015-05-16 11:39 176 查看
命名空间(也可以称为: 名字空间) 英文单词:namespace
定义:【这段话引字百度百科里面的解释】
【命名空间是用来组织和重用代码的编译单元。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用
namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。】

命名空间分为:标准命名空间、自定义命名空间、无命名空间,标准命名空间是指系统提供的一些命名空间,如std等,接下我们分别来介绍这两种命名空间的使用方法。
1、标准命名空间
我们以std为例,讲解标准命名空间中cout输出流的使用。
使用标准命名空间主要有三种方法
(1) 导入全部内容 using namespace std;
(2) 导入部分内容 using std::cout; :: -是域作用符 的
(3) 使用时进行说明:std::cout<<"大家好才是真的好";

2、自定义命名空间
namespace 命名空间名字
{
定义变量;
定义函数;
}

namespace ZHANGSAN
{
void Print(void)
{
std::cout<<"ZHANGSAN is namespace!"<<endl;
}
}
3、无命名空间

全局变量: int num;

当变量或者函数不属于指定的任意的命名空间时,我们就说他是无名的命名空间.
int num;
void Print(void)
{
cout<<"全局Print()"<<endl;
}


其它:
<1>.命名空间的部分内容导入优先于全部内容导入

<2>.命名空间是可以嵌套的
namespace tarena
{
namespace vip
{
namespace CSD1310
{
void show()
{
cout<<"我们的口号是:不抛弃,不放弃!"<<endl;
}
}
}

namespace xx
{
namespace xxx
{
void show()
{
cout<<"weikangc is good boy!"<<endl;
}
}
}
}


<3>.长度比较长的命名空间可以起别名,重新起名的命名空间之间不能赋值。
namespace ns = tarena::vip::csd1310;
ns::show();

整个例子程序:
#include <iostream>
using namespace std;
namespace ZHANGSAN { void Print(void) { std::cout<<"ZHANGSAN is namespace!"<<endl; } }

namespace LISHI
{
void Print(void)
{
std::cout<<"LISHI is namespace!"<<endl;
}

int Add(int a,int b)
{
return a+b;
}

int Sub(int a,int b);
}

int LISHI::Sub(int a,int b)
{
return a-b;
}

void Print(void)
{
cout<<"全局Print()"<<endl;
}

//命名空间的嵌套使用

namespace tarena { namespace vip { namespace CSD1310 { void show() { cout<<"我们的口号是:不抛弃,不放弃!"<<endl; } } } namespace xx { namespace xxx { void show() { cout<<"weikangc is good boy!"<<endl; } } } }

int main(void)
{
std::cout<<"Hello C++"<<endl;

ZHANGSAN::Print();

LISHI::Print();

using namespace ZHANGSAN;
ZHANGSAN::Print();
using namespace LISHI;
LISHI::Print();

cout<<Add(10,20)<<endl;
cout<<Sub(10,20)<<endl;

::Print();

using LISHI::Add;

cout<<Add(10,201)<<endl;

//------------------------------
// [5/9/2015 Administrator]
cout<<"-----------------------------------"<<endl;
using tarena::vip::CSD1310::show;
show();

tarena::vip::CSD1310::show();
tarena::xx::xxx::show();

namespace ns = tarena::vip::CSD1310;
namespace nsex = tarena::xx::xxx;
namespace nseex = tarena::vip::CSD1310;
ns::show();
nsex::show();
nseex::show();

//nseex = nsex;
//nseex::show();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: