博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++_基础6-名称空间
阅读量:7235 次
发布时间:2019-06-29

本文共 1719 字,大约阅读时间需要 5 分钟。

名称空间

背景:C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。例如许多厂商的类库,可能导致名称冲突。这种冲突被称为名称空间问题。

解决措施:C++标准提供了名称空间工具;以便更好地控制名称的作用域。

传统的C++名称空间

介绍一些术语,熟悉名称空间的概念

声明区域(declaration region),是可以在其中进行声明的区域。例如,可以在函数外面声明全局变量,对于这种变量,其声明区域为其声明所在的文件。对于在函数中声明的变量,其声明区域为其声明所在的代码块。

 

潜在作用域(potential scope),变量的潜在作用域从声明点开始,到其声明区域的结尾为止。因为变量必须先定义后使用。

 

作用域(scope),变量并非在其潜在作用域都是可见的,它可能被另一个嵌套声明区域中的声明的同名变量隐藏。变量对程序可见的范围被称为作用域。

新的名称空间特性

C++通过定义一种新的声明区域来创建命名的名称空间,提供一种声明名称的区域。

新的关键字namespace

举例:创建两个名称空间Jack和Jill

namespace Jack{

       double pail;

       void fetch();

       int pal;

       struct Well {…};

}

 

namespace Jill{

       double fetch;

       int pal;

       struct Hill{…};

}

 

名称空间是开放的,即可以把名称加入到已有的名称空间中。

namespace Jill{

       char * goose(const char *);

}

还有一种方法来访问给定名称空间中的名称,通过作用域解析运算符: :,使用名称空间来限定该名称

Jack :: pail = 12.34;

Jill :: Hill = mole;

Jack :: fetch();

未被装饰的名称 称为未限定的名称

包含名称空间的名称,被称为限定的名称

 

1  using声明和using编译指令

       如果我们不希望每次使用时都对它进行限定,因此C++提供了两种机制(using声明和using编译)来简化对名称空间中名称的使用。

       using声明使特定的标识符可用

       using编译指令使整个名称空间可用

       using声明将特定的名称添加到它所属的声明区域中。例如,main()中的using声明Jill::fetch将fetch添加到main()定义的声明区域中。完成该声明后,便可以使用fetch代替Jill::fetch。using 编译指令将特定的名称空间中的名称添加到它所属的声明区域中

       using声明使一个名称可用,而using编译指令使所有的名称都可用。

       using namespace Jack; 使得名称空间Jack中的所有名称都可用。

       using namespace std;   //使得std名称空间中的变量名在该函数中可用。

为了避免二义性,不允许同时使用两个using声明声明两个不同名称空间中的同名变量

       using jack :: pal;

       using jill :: pal;

 

2      using编译指令和using声明之比较

 

名称空间示例

 

名称空间及其前途

       名称空间旨在简化大型编程项目的管理工作。

============================================

总结

  • C++鼓励程序员在开发程序时使用多个文件,一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型;并将函数定义放在一个独立的源代码文件中。头文件源文件一起定义和实现了用户定义的类型及其使用方式。最后,将main()和其他使用这些函数的函数放在第三个文件中。
  • 名称空间允许定义一个可在其中声明标识符的命名区域。这样做的目的是减少名称冲突,尤其当程序非常大,并使用多个厂商的代码时。可以通过使用作用域解析运算符、using声明、using编译指令,来使名称空间中的标识符可见。

转载于:https://www.cnblogs.com/grooovvve/p/10467717.html

你可能感兴趣的文章
Centos7 磁盘分区表 MBR 和 GPT
查看>>
“轻薄”有理,稳重有余 本本最商务
查看>>
[sqlserver]sqlserver2005设置允许远程连接
查看>>
对ASP.NET网站高性能和多并发的设计的讨论
查看>>
组策略之账户安全设置
查看>>
[Unity3d]打包Assetbundle并加载
查看>>
使用我们的DataProvider
查看>>
抓信插件开发遇到网页的CSS不起作用
查看>>
体验microsoft Security Essentials(微软免费杀毒软件)
查看>>
解决Ubuntu中更改MySQL默认编码报错
查看>>
VLAN概念的面试题及解答_路由交换
查看>>
mysql忧化参数
查看>>
深入浅出单实例Singleton设计模式
查看>>
Windows Phone 实用开发技巧(12):让你的Windows Phone应用变得更Metro
查看>>
极速理解设计模式系列:6.适配器模式(Adapter Pattern)
查看>>
Swing与Servlet通信简单示例
查看>>
【一天一个shell命令】文本操作系列-chmod
查看>>
Cisco 3550-SMI IOS升级过程分享
查看>>
Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器
查看>>
JSF Spring Hibernate 整合:JSH1
查看>>