c++中命名空间与作用域

命名空间和作用域

命名空间(namespace)是一种将相关的类型进行分组的逻辑命名方案。它将各种命名实体进行分组,各组间可以互不影响,避免出现重名,这与jave的包机制类似。学习本章,读者可以更好理解大型开发中的各种设计规划,更好地深入学习项目构建。

命名空间的定义

命名空间用namespace来声明,后面跟空间的名称,名称之后是由{}包含起来的声明块。在一个名字空间内声明的实体被称为名字空间成员(namespace member),每个成员都必须指向该名字空间内的唯一实体,不同的名字空间可以具有相同名字的成员。命名空间的格式如下所示。
namespace space_name
{

}

#include <iostream>
using namespace std;
namespace SpaceA{
	class A
	{
	public:
		int fun(void)
		{
			cout<<"In Class A of namespace SpaceA"<<endl;
			return 1;
		};
	};
	char *str ="In namespace SpaceA";
}
namespace SpaceB{
	class A
	{
	public:
		int fun(void)
		{
			cout<<"In class A of namespace SpaceB"<<endl;
			return 1;
		};
	};
	char *str ="In namespace SpaceB";
}
int main()
{

	SpaceB::A ba;
	SpaceA::A aa;
	aa.fun();
	ba.fun();
	cout<<SpaceA::str<<endl;
	cout<<SpaceB::str<<endl;
   return 0;
}

在这里插入图片描述
分析:该示例定义了两个命名空间SpaceA和SpaceB,在两个空间内都有同样的类名A和变量str,但是在使用时并没有引入冲突。
注意:名字空间的说明和类的声明有点像,但是它不能以“;”结束。
名字空间的定义可以是不连续的。
名字空间还可以嵌套。

如何使用命名空间

两种方法:
1.域限定符:
域限定符是“::”,其使用方法如下所示。
space_name::space_member;
如果命名空间是嵌套的,则要连续写出所有空间名。
space_name1::space_name2::…::space_nameN::space_member;
但是,如果实体在为命名的空间内,则可以直接访问,就像一个全局变量一样。
2.使用using声明:
一个using 声明一次只能作用于一个命名空间,它明确指出了用到的命名空间,其格式如下:
using namespace name_space;
using name_space::space_member;
第一种方式表示将命名空间引用到该文件中,以后对该命名空间内的成员访问时,就不需要加完整的空间限定了。第二种方式表示只引用space_member这一个成员,而其他成员不可见。
3.别名:
有时名字空间的命名太长不方便使用,这时可以给它一个别名。其格式如下:
namespace othername=space_name;

#include <iostream.h>
#include <otherfile.h>
using namespace OtherFile;
namespace ThisFile{
	char *str="char *str,in ThisFile namespace";
	void fun(void)
	{
		cout<<"function fun,in ThisFile namespace"<<endl;
	}
}
namespace{
	char *unnamed ="unnamed namespace";
}
int main(int argc ,char* argv[])
{
	cout<<str<<endl;
	fun();			//来自空间OtherFile
	cout<<ThisFile::str<<endl;
	ThisFile::fun();		//引用自己的名字空间中的函数
	cout<<unname<<endl;//引用无名的名字空间
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GZFSJK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值