C++_02_命名空间

命名空间

在C++中命名空间(namespace)的作用

  命名空间,就是为了解决同一个源代码中相同命名的变量或者函数之间相互冲突的问题,就是要避免这种冲突,让程序代码中可以多次使用同一个表述符而存在的。

  对于一名开发者而言,代码量过于庞大,或多或少会忘记之间之前用过的变量名或函数名,导致再次定义的时候又用了之前用过的变量名或函数。这样毫无疑问会导致变量名和函数名出现重复定义报错的问题

  比如:

int  flag = 1;      //A声明的变量
// ……             //中间间隔若干行代码
bool flag = true;   //B声明的变量

  这位同学前面使用flag定义为整形数1,用带好A表示,后面又定义为布尔型true,用代号B表示;两者都使用了同一个表述符flag。这样在程序中是不行的,会出现重复定义的错误,无法编译通过。

那么就使用命名空间来解决吧!

  如下:

//定义
namespace A
{   //A的变量声明
    int flag = 1;
}
namespace B
{   //B的变量声明
    bool flag = true;
}

  这样,通过定义两个命名空间A和B后,使用的两个flag虽然依旧是两个相同的表述符,但增加了前缀后,表述符所属的范围和意义也就完全不同相互独立了。

  在使用这两个表述符的时候记得要加前缀(A::)(B::),这表示完全不相关联的两个表述符

//引用
A::flag = 1;        //使用A定义的变量flag
B::flag = true;     //使用B定义的变量flag

在C++中通过using声明使用命名空间(namespace)

  在c++中除了一对一的引用命名空间以外,还可以通过using范围性的引用!

  如下:

//引用
using A::flag;   //using表示正在使用,强制无主变量名的引用A命名空间内的对于变量名或函数名
A::flag = 1;        //使用A定义的变量flag
B::flag = true;  //使用B定义的变量flag
flag = 1;  //没有前缀空间命名标识,默认使用A定义的变量flag

  using 声明不仅仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间

//定义
namespace A   
{   //A的变量声明
    int flag = 1;
    int mnt = 2;
}
namespace B
{   //B的变量声明
    bool flag = true;
   bool mnt = false;
}

//引用
using namespace A;  //强制引用A中所有相同表述符
A::flag = 1;        //使用A定义的变量flag
B::flag = true;     //使用B定义的变量flag
flag = 1;           //使用A定义的变量flag
mnt = 2;            //默认使用A中的变量2

通常在程序中采用了 using 声明命名空间都具有很强的霸道属性;|
std:using namespace std;  这一语句涵盖了 std 命名空间中的所有标识符,而该命名空间包含 C++ 所有标准库。
有了这一句就可以不需要每次前缀标识而自由使用std默认的所有标准表述符。(常用:cin 、cout 、、、)

解答我的小迷糊:

注意:命名空间和类是两个不同的概念

  1、类几乎可以理解为从C语言中过度而来的结构体,只不过结构体内只有变量,而类中不仅仅又成员变量还可以有成员函数;类的后面有分号( ; 

  2、命名空间是为了解决同一表述符多次引用的命名冲突问题,本质上只是区分变量名或函数名,命名空间的大括号后面一般没有分号( 

  3、类是为了组建构成新的数据或函数类型并以此作为一个蓝本,目标是数据和函数类型,作用在本质;而命名空间则完全是为了变量和函数服务的,作用在表层,两者之间八竿子打不着,但经常有同学会把两者混淆傻傻分不清。

  4、使用命名空间修饰的表述符时候,一定是          空间名:: 变量名(或函数名)
     使用类定义对象时,一定是       类名   对象名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值