C++命名空间的几种玩法

**什么是命名空间?**

命名空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:

namespace name1
{    
 int a = 0; 
}

说到这里,相信你一定会想到std这个命名空间。

没错,标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。

**命名空间的几种玩法...**

   NO.1 两种访问方式

   要在采用标准C++的平台上使用标准C++库中的组件,有两种方式:

   1.写一个using指示符:using namespace std; 直接使用标准C++库中的所有成员。

   2.std::成员 的方式使用C++库里的成员。(::是作用域解析符)

 

在这里,我们只需要了解有这两种方式即可。为了程序的简洁性和可读性,编写程序时普遍采用第一种方式。当然,在同一段程序中,这两种方式可以同时使用。

   NO.2 解决变量命名冲突的问题

   我们来看这样一个例子:

#include<iostream>
using namespace std;

namespace name1
{
	int value = 1;//name1域内对象
}

namespace name2
{
	int value = 2;//name2域内对象
}

int value = 3;//全局变量

int main()
{
	int value = 4;//局部变量

	cout << name1::value << endl;
	cout << name2::value << endl;
	cout << value << endl;

	getchar();
	return 0;
}

在这段程序中,有两个域的域内变量和全局、局部变量。程序执行结果为:

由上图可以看出:

1.加上域作用限定符可以访问不同域中的成员变量,且变量名可以相同。

2.重名的全局和局部变量,编译器优先访问局部变量,为了印证这一点,在屏蔽掉局部变量后,程序执行结果如下:


另外,如果不想用::限定符来访问自己定义的命名空间,也可以在main函数前使用“using namespace +命名空间名”的方式来访问。

  NO.3 命名空间的嵌套定义

  除了单独使用外,命名空间还可以进行嵌套定义,例如:

#include<iostream>
using namespace std;

namespace name1
{
	namespace name2
	{
		int value = 1;
	}
	int value = 2; 
}

int main()
{
	cout << name1::value << endl;
	cout << name1::name2::value << endl;

	getchar();
	return 0;
}
程序执行结果大家已经猜到了,没错,就是2和1。

** 一点题外话。。。**

这个程序:

#include<iostream.h>
using namespace std;

int main()
{
	cout << "Hello World" << endl;
	getchar();
	return 0
}

   不会编译通过,是因为#include<iostream.h>C++比较老的库, 而vc6.0仍然支持这个头文件 ,但新的编译器(如vs2008及以上)都不再支持,所以建议使用新库的头文件#include<iostream>



 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值