- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
名字空间 内容提要 1 名字空间定义 1)定义 2)嵌套名字空间 3)名字空间成员 4)无名名字空间 2 名字空间使用 1)名字空间别名 2)using指示符 3)C++的标准名字空间 §1名字空间定义 1 定义 名字空间是一种程序描述逻辑分组的机制 名字空间是一种作用域 作用域一般是{}括起来的一块区域,如函数、类、if-else控制语句等都有作用域 缺省情况下,我们在全局域中定义各种语言符号:函数、类、模板、全局对象等 1 定义(续) 名字空间作用——为了解决名字冲突问题:大型程序所用的名字(标志符)很多,经常出现名字冲突(全局作用域内同名),特别是当组合不同厂商的库的时候。如: 1 定义(续) 名字空间定义形式 namespace namespace_name { // 名字空间的成员的声明 //必须写在名字空间的定义 } 1 定义(续) 名字空间不一定连续,可以累积 2 嵌套名字空间 名字空间可以包含嵌套的名字空间 namespace namespace_name1 { // … namespace namespace_name2 { // … } } // 外层名字空间 和函数内局部作用域一样{}内嵌套{} 3 名字空间成员 限定在名字空间{}范围内的成员,有函数、类、模板、常量对象等 名字空间成员隶属于名字空间作用域,其使用以作用域运算符::来限定 如前面Max定义可以这样 4 无名名字空间 无名名字空间——C++中可以用未命名的名字空间声明一个局部于某一文件的符号 无名名字空间的定义不能跨越多个文本文件(内部所用,不与其它文件冲突) 例如 §2名字空间使用 1 名字空间别名 名字空间成员使用时用名字空间限定,如 如果每次都这样使用比较麻烦,特别是名字空间名字比较长的时候,如 International_Business_Machines::XXX 1 名字空间别名(续) 名字空间别名——把一个较短的同义词与一个名字空间名关联起来,例如: 2 using指示符 using指示符是用于使用名字空间的符号 形式: using namespace 已定义名字空间名; 如:using namespace MathLib; 使用:Max(x, y); 此外,用限定词也可以使用名字空间,但是比较麻烦,如: void f() { MathLib::Max(x, y); } 3 C++的标准名字空间 在新的C++库标准中都是用名字空间 标准C++库中的所有组成部分都是在一个被称为std 的名字空间中声明和定义的 在标准头文件如vector或iostream 中声明的函数对象和类模板都被声明在名字空间std中 VC的Include文件夹下有两类头文件:带有.h和不带.h扩展名的,要使用不带扩展名的头文件,必须:using namespace std; 3 C++的标准名字空间(续) 简单示例 完 * // ----- IBM_MathLib.h ----- const double PI=3.1416; // … // ----- HP_MathLib.h ----- const double PI=3.1416; // … // ----- Our Computer.cpp ----- #incclude IBM_MathLib.h #incclude HP_MathLib.h //肯定出现重定义的错误! //… Namespace MathLib { const double PI = 3.1415926; int Max(int, int) ; } // ----- MathLib.cpp ------ namespace MathLib { int Max(int a, int b) { return (ab?a:b); } } // ----- MathLib.h ----- namespace MathLib { int Max(int, int) ; } // ----- MathLib.cpp ------ int MathLib::Max(int a, int b) { return (ab?a:b); } // 类似于类成员函数的外部定义 // ----- MathLib.cpp ------ namespace { void swap( double *d1, double *d2 )
文档评论(0)