c++系列: namespace(一)

1、为什么需要namespace?

namespace解决的全局变量和函数命名冲突的问题,namespace功能就像身份证一样,即使全国有100个人跟你同名,但是你的身份证号是唯一的,身份证记录你的出身省份、出身日期等等信息。

2、c++和c解决命名冲突的方式有何不同?

c++是namespace命名空间,说白了,先定义一个篮子,篮子里面放东西,这得要求每个篮子都是唯一的,而篮子之间里面的东西可以相同。

c语言没有关键字能解决这个问题。所以,一个c语言的项目,尽可能一个人写;定义的全局变量,前面加上前缀;不需要外部访问的函数加上static。

c++和c语言相比之下,c++解决的方法是从语言出发,而c语言解决的方法是从人出发。

3、namespace的用法

  • namespace语法 namespace xxx{ int a};

  • 访问变量的方式:
    1.xxx::a = 10; (::是用来连接作用域和作用域里面的内容)
    2.using xxx::a; 然后就能直接使用 a;(using相当于告诉编译器,编译a的时候,要在xxx里面找)
    3.using namespace xxx; (xxx里面的内容可以直接使用,啥也不用加,相当于将xxx的内容全部裸露出来)

    第一种方式和第三种方式最常用。第一种省去了using,第三种直接省去定义域,而第二种,有种夹在中间的感觉。

实验一:使用方式1和2访问

namespace np
{
	void func1()
	{
		
	}
	void func2()
	{
		func1();
	}
};


using np::func2;

int main(void)
{
	np::func1();
	func2();
	return 0;
}

实验二:使用方式3访问

namespace np
{
	void func1()
	{
		
	}
	void func2()
	{
		func1();
	}
};


using namespace np;

int main(void)
{
	func1();
	func2();
	return 0;
}

实验三:func2实体在命名空间之外实现,func2在命名空间里声明

namespace np
{
	void func1()
	{
		
	}
	void func2();

};
 
void func2()
{
	func1();
}	
 
using namespace np;

int main(void)
{
	func1();  
	func2();	
	
	return 0;
}

实验四:不用文件之间使用namespace

//test2.cpp
namespace np2
{
		void func3()
		{
			
		}
};
//test1.cpp

//namespace np2;   		//编译器不承认这个语法,后面要有一个{}
//extern namespace np2; //编译器不承认这个语法,后面要有一个{}

//namespace np2{};		//编译器提示 func3函数没声明,意味着,np2命名空间在test1中重新定义
//extern namespace np2{}; //编译器不承认这个语法,没有声明np2里面的东西

//namespace np2{void func3();};   //编译可以通过,但这种相当于np2命名空间在test1中重新定义,func3在test1中寻找

namespace np2{extern void func3();}; //编译器可以通过,func3在外部寻找。

using namespace np2;

int main(void)
{
	func3(); //test2文件
	return 0;
}

跟C语言的思路一样,先声明外部的变量才去使用。声明是为了编译时候能通过,才能去链接。

4.最后

C++复杂就复杂它的特性,同时它的特性越复杂,说明它能解决的问题越多。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值