C++进阶-名字空间

namespace

C++提供了名字空间( namespace)来规划和管理程序中的各种名字(函数名、变量名、类名)。而在开发实践中,常常根据不同的模块来定义不同的名字空间,这样各个模块内部的名字不会互相影响,名字空间起到了很好的模块包装的作用。

不同名字空间内的同名函数、同名变量等可以同时存在,互不冲突。定义一个名字空间的语法格式如下:

namespace 名字空间名
{
	// 名字空间内的声明和定义
};
// 名字空间 Zhangsan
namespace Zhangsan
{
	// 名字空间 Zhangsan 中的 Student 类
	class Student
	{
		public:
			int nIndex;
			int nAge; // 年龄
	};
};
// 名字空间 Lisi
namespace Lisi
{
	// 名字空间 Lisi 中的 Student 类
	class Student
	{
		public:
			int nIndex;
			string strName; // 姓名
	};
};
// 匿名名字空间
// 如果没有说明在哪一个具体的名字空间,则默认在匿名名字空间
class Student // 匿名名字空间中的 Student 类
{
	public:
	int nIndex;
	bool bMale; // 性别
};
class Teacher // 匿名名字空间中的 Teacher 类
{
	// …
};

可以在这些同名的类之前加上相应的名字空间来限制修饰类,从而访问在某个名字空间下所定义的某个具体的类。例如:

// 定义一个类型为 Zhangsan::Student 的变量
// 这时使用的是 Zhangsan 名字空间下的 Student 类
Zhangsan::Student zStudent;
zStudent.nAge = 14;
// 定义一个类型为 Lisi::Student 的变量
// 这时使用的是 Lisi 名字空间下的 Student 类
Lisi::Student lStudent;
lStudent.strName = "Chen Liangqiao";
// 定义一个类型为::Student 的变量,
// 如果类前没有指明名字空间,则默认为全局名字空间
// ::Student 等同于 Student
::Student gStudent;
gStudent.bMale = true;

在使用名字空间时,可以在名字空间之后使用“::”域操作符引出其中的名字。特别地,如果“::”之前没有显式地给出一个空间名字,就说这是全局名字空间,也可以称为匿名名字空间。匿名名字空间是 C++的默认名字空间,如果某个名字不属于任何给定的名字空间,那它就属于匿名名字空间。比如,上面例子中的第三个 Student 类就属于匿名名字空间,我们可以使用“::Student”或者“Student”引用它。

用“using namespace”关键字来指明编译时默认查找的名字空间,引入某个名字空间下的所有名字。

// …// 引入名字空间 Zhangsan
using namespace Zhangsan;
int main()
{
	// 名字冲突,在 Zhangsan 名字空间和匿名名字空间下都有 Student 类
	Student zStudent;
	// 明确的名字,显式地指定了 Student 所属的名字空间为 Lisi
	Lisi::Student lStudent;
	// 明确的名字,因为只有名字空间 Zhangsan 中有 Teacher 类的定义
	Teacher zTeacher;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值