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 命名空间名字
{
定义变量;
定义函数;
}
全局变量: int num;
当变量或者函数不属于指定的任意的命名空间时,我们就说他是无名的命名空间.
其它:
<1>.命名空间的部分内容导入优先于全部内容导入
<2>.命名空间是可以嵌套的
<3>.长度比较长的命名空间可以起别名,重新起名的命名空间之间不能赋值。
namespace ns = tarena::vip::csd1310;
ns::show();
整个例子程序:
定义:【这段话引字百度百科里面的解释】
【命名空间是用来组织和重用代码的编译单元。如同名字一样的意思,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;
}