命名空间详解(c++)

为什么使用命名空间?

假设我班有俩个同学,一男一女都叫Eric,但是如果他俩同时在我面前我只叫Eric的话,他俩会不知道我在叫他俩哪位?
同样的,我们将这种现象放在代码中。程序员对对象命名的时候,一般都会起一些有意义的名称。在一段代码中会现很多的实体,这些实体可能拥有不同的功能,但是他们有同样的名称。但是,c++中采用的是单一的全局变量命名空间,在这单一的空间中,实体必须有唯一的名称。现实中会经常出现同名的现象,这种命名冲突被称为“名字污染”。

  • 为了从根本上解决这种现象,c++引入了命名空间的命名机制,将不同的实体放在不同的命名空间中,即便它们有相同的名称,但是被放在不同的命名空间中,它们就不会冲突。这种方式就好比,我现在叫我班的Eric,可以在前面加女Eric;男Eric来区别他俩。
  • 对于命名空间的理解,可以将其理解为一个文件夹,文件夹内部的对象就是一个一个的文件,不同的文件夹中可以有相同名称的文件,在用文件夹内部的文件时,只要指定是哪一个文件夹中的文件就OK~~~但是我们理解可以这么理解,但是二者本质的区别是命名空间是一种逻辑意义的组合;而文件夹是一种物理意义的组合。

定义命名空间

命名空间用namespace 来声明,后面紧跟空间的名称,名称之后是由 {} 包含起来的声明块。在一个命名空间内声明的实体被称为命名空间成员(namespace member)。
命名空间的格式:

namespace space_name{
	...
}

举例说明:

#include <iostream>
using namespace std;
namespace Boy{
	class Eric{
	public:
		int fun(){
			cout << "我叫Eric,我是男孩子~~~" << endl;
			return 1;
		};
	};
	char *str = "I am Eric, In namespace Boy";
}

namespace Girl{
	class Eric{
	public:
		int fun(){
			cout << "我叫Eric,我是女孩子~~~" << endl;
			return 1;
		};
	};
	char *str = "I am Eric, In namespace Girl";
}

int main(){
	Boy::Eric boy;
	Girl::Eric girl;
	boy.fun();
	girl.fun();
	cout << Boy::str << endl;
	cout << Girl::str << endl;
	return 0;
}

输出效果:
在这里插入图片描述
分析代码: 该代码定义了俩个命名空间Boy和Girl, 在俩个命名空间中都有同样的类名Eric和变量str,但是在使用时明没有发生冲突。

待续~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值