【c++】命名空间概念及其使用

🦄个人主页:-雷阵雨-

🦄专栏:c++

⚙️作环境:Visual Studio 2019

目录

一:前言

二:命名空间 

1:命名空间的基本概念 

2:命名空间的定义 

3:命名空间的使用 

1:添加加命名空间 域作用限定符

 2:使用using把命名空间的变量引入

 3:使用using namespace lzy展开命名空间

 4:命名空间定义函数

 5:命名空间也可以嵌套定义

三:总结

 


一:前言

本篇博客为大家讲解一下c++命名空间这一重要概念,以及其使用。

二:命名空间 

1:命名空间的基本概念 

命名空间:是一种用于组织和隔离命名标识符的容器或上下文,他们用于确保吧同范围的标识符不会发生命名冲突。  

命名空间:又称名字空间,名称空间,名域,作用域,也算是c++对C语言的缺陷做一个改进。 

 命名空间:在c++中函数和变量都是唯一的名称,如果多个函数或者变量使用相同的名称,就会出现命名冲突,导致编译错误,为了解决这一麻烦,c++提供了命名空间它可以将一组名称封装在一个特定的域中,使这些名称与其他作用域中的名称区分开来。 它可以包括结构体,函数,类,变量等各种类型的声明和定义 

2:命名空间的定义 

 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

 书写个代码:

#include<stdio.h>
int scanf=0;
int mian()
{
	printf("%d", scanf);
	return 0;
}

大家认为这个代码可以运行吗?

这个变量没毛病的,因为我们就需要在C语言中展示这个冲突,c语言中表示不可以使用关键字做变量名,但是没有规定函数名不可以,我们看看终端显示:

出现这个结果是意料之中,我们的头文件<stdio.h>展开包含scanf这个函数。你打印scanf时候就会出现问题,你打印的是那个呢?是库函数的函数名,还是我们创建全局变量,这就是C语言的不足,你必须小心与函数库的函数名发生冲突,从而导致bug。

3:命名空间的使用 

1:添加加命名空间 域作用限定符

c++的命名空间就弥补了这一个不足,有了命名空间,我们可以把自己所需要的变量,结构体,函数,存放在这个域中,使用我们直接调运就可以, 

代码如下:

namespace lzy
{
	int a = 10;
	int b = 20;
	int c = 30;
}
int main()
{
	printf("a=%d\n", lzy::a);
	return 0;
}

我们就封装了一个名为bit的命名空间,然后我们使用域作用限定符调出来就可以;

lzy::scnaf:直接指定a变量就是lzy空间里面a变量。

运行结果:

 2:使用using把命名空间的变量引入

namespace lzy
{
	int a = 10;
	int b = 20;
	int c = 30;
}
using lzy::b;
int main()
{
	printf("a=%d\n", lzy::a);
	printf("b=%d\n", b);
	return 0;
}

using:作用就是展开命名空间。

如图using lzy::b作用就是把命名空间中的b单独展开在全局域当中,就是int b=20;

可以在任何地方调用,就相当没有封装的一个变量,单独展开了。

 3:使用using namespace lzy展开命名空间

namespace lzy
{
	int a = 10;
	int b = 20;
	int c = 30;
}
using namespace lzy;
int main()
{
	printf("a=%d\n", lzy::a);
	printf("b=%d\n", lzy::b);
	printf("c=%d\n", lzy::c);
	return 0;
}

using namespace lzy 这样子就是全部展开,我们命名空间就显的很没作用。

 4:命名空间定义函数

namespace lzy
{
	int a = 10;
	int b = 20;
	int c = 30;
	int Add(int left, int right)
	{
		return left + right;
	}
}
using namespace lzy;
int main()
{
	printf("a=%d\n", lzy::a);
	printf("b=%d\n", lzy::b);
	printf("c=%d\n", lzy::c);
	printf("%d\n", lzy::Add(3, 4));
	return 0;
}

我在命名空间中定义了一个Add函数,求他们的和。

运行结果:

 5:命名空间也可以嵌套定义

namespace lzy
{
	int a = 10;
	int b = 20;
	int c = 30;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace lzy2
	{
		int Add(int left, int right)
		{
			return left + right;
		}
	}
}
using namespace lzy;
int main()
{
	printf("a=%d\n", lzy::a);
	printf("b=%d\n", lzy::b);
	printf("c=%d\n", lzy::c);
	printf("%d\n", lzy::Add(3, 4));
	printf("%d\n", lzy::lzy2::Add(6, 6));
	return 0;
}

我们嵌套了一个名为zy2命名空间。

运行结果:

三:总结

本篇博客为大家讲解了命名空间,命名空间在一些大项目较为重要,每个人的想法都不一,这样子就可以避免一些不必要的麻烦,在命名空间的使用时,嵌套命名空间在展开的时候利用域作用限定符逐渐展开就可以。

最后希望这篇文章可以给大家带来帮助。

 

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值