C++中命名空间的自我修养

命名空间

 什么是命名空间?

在日常的程序代码编写中,我们经常会给大量的函数以及变量取名字,取的名字多了,你总会发现,有些名字就是不能使用,因为它会和库的函数发生冲突,让编译器混乱,在库和你写的变量名或者函数名之间摇摆,从而使程序崩溃!而命名空间就是为了避免这一情况发生,为了方便程序员充分发挥自由而产生的一种逻辑分组机制,它可以将函数和变量封装在一个独立的作用域当中,与其他作用域分割开来, 不被打扰,避免发生名称冲突

    

命名空间的使用

1.命名空间的声明

namespace namespace_name{
    //内容
}

namespcae 用来声明命名空间


namespcae_name  命名空间名,可以自己随便写


{                           }   内容编写,除了不能运行以外,其中的内容和main()中的内容一样,写函数,定义变量,结构体........

 2.命名空间的使用

     命名空间的使用有三种方法,以下述代码为例

     

namespace huaci
{
	void Func() {
		cout << "HELLO,C++!" << endl;
	}
	int rand = 50;
}

     

     第一种:     命名空间名::成员名

     

    huaci::Func();
	int i = huaci::rand;

    第二种 :     在全局区域开放命名空间中的成员

    using      命名空间名 ::成员名

                         

using huaci::Func;
int main()
{
   //内容
}

     第三种:     直接展开命名空间,开放命名空间作用域

    using   namespace   命名空间名

using namespace huaci;
int main()
{
   //内容  
}

 注:后续两种方法属于是成员突破类域,脱离了命名空间的作用域限制,仍会和库中的成员发生命名冲突,一般不建议使用;后续两种方法都是在全局域中使用的,不能在main函数中使用

3.命名空间的使用规范 

命名空间可以在全局作用域中定义,可以在其他命名空间中定义,实现嵌套

但不允许在函数内定义


命名空间的定义可以分散在多个文件中(命名空间同名可以合并),但是不能跨文件分割命名空间


命名空间名一般小写,单词之间用下划线隔开

嵌套命名空间

前面我们说了,命名空间可以在内部定义命名空间,命名空间中又有一个命名空间,这就是嵌套命名空间,嵌套命名空间的使用会复杂一些,但对代码的分割有十分大的帮助,让代码更加容易维护和管理 

1.嵌套命名空间的书写

namespace out_namespace
{
  //内容
  namespace inside_namespace
  {
     void Func()
     {
       cout<<"hello C++"<<endl;  
     }
    //内容
  }
}
自嵌套命名空间就是命名空间中又有命名空间,嵌套层数由程序员自己决定,想怎么套,就怎么套,但一般不超过三层

2.嵌套命名空间的常见使用

嵌套命名空间的使用会比单命名空间复杂一些,我们主要探讨的是,内层命名空间怎么使用外层命名空间成员,外成命名空间又怎么使用内层命名空间成员,以及怎么在外部怎么访问内层命名空间


第一种 情况:外部访问内层命名空间

           外层空间名::内层空间名::成员名

                       

int main()
{
  out_namespace::inside_namespace::Func();
  //其他
}

第二种 情况:外层命名空间访问内层命名空间

   

namespace out_namespace
{
	
	namespace inside_namespace 
	{
		void Inside_Func()
		{
			cout << "内层命名空间" << endl;
		}
	}
	void Out_Func()
	{
		cout << "外层命名空间" << endl;
		inside_namespace::Inside_Func();
	}
}
int main()
{
	out_namespace::Out_Func();
	return 0;
}

  运行结果

  

 注:外层命名空间访问内层命名空间只能在内部命名空间后面的代码段,不能在内部命名空          间之前的代码段访问

namespace out_namespace
{
	
	void Out_Func()
	{
		cout << "外层命名空间" << endl;
		inside_namespace::Inside_Func();
	}
    namespace inside_namespace 
	{
		void Inside_Func()
		{
			cout << "内层命名空间" << endl;
		}
	}
}
int main()
{
	out_namespace::Out_Func();
	return 0;
}

   这样是不符合C++要求的,会发生报错


第三种   内层命名空间访问外层命名空间

namespace out_namespace
{
	void Out_Func()
	{
		cout << "外层命名空间" << endl;
		
	}
	namespace inside_namespace
	{
		void Inside_Func()
		{
			cout << "内层命名空间" << endl;
			Out_Func();
		}

	}
}
int main()
{
	out_namespace::inside_namespace::Inside_Func();
	return 0;
}

运行结果

内层命名空间访问外层命名空间的成员可以直接访问

注:当内层命名空间的成员与外层命名空间的成员发生重名的时候,内层命名空间会优先使用内层命名空间,即找自己的,再找外面的。

命名空间的好处

命名空间初步带我们认识了封装,将自己的代码放入一个独立的空间,给我们带来了许多好处

  • 代码具有层次感,管理与维护的效率大大提高
  • 封装的初步,各个命名空间互不打扰
  • 组织代码,让代码可读性增强

熟练使用命名空间,会让你的代码看起来舒服很多,对你的代码维护有大大的帮助,希望本篇文章对你的命名空间理解有一定的帮助 ———甘宝的小鱼肝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值