C++之命名空间(End Chapter)

今天这一节,注意要讲C++中的命名空间和头文件的命名规则。也是C++这一基础系列的最后一节。首先感谢在学习C++的一路上,有这么多关注这系列的博友们的陪伴和帮助。正因为有了你们的建议和指导,使我对C++有了更深的认识和更大的兴趣。这个系列结束之后,我会继续学习和关注C++的一些实际应用。

大家都知道一个大型软件通常是由多个模块组成的,这些模块往往是由不同的人合作完成,最后组成一个完整的程序。假如不同的人分别定义了函数和类,放在不同的头文件中,在主文件需要用到这些函数和类时,用#include命令行将这些头文件包括进来。但由于各个头文件是由不同的人设计的,可能在不同的头文件中会有相同的名字来定义函数或类,这样就会出现命名冲突的问题。同时如果在程序中用到第三方类库,也会有同样的问题。为解决这一问题,ANSI/ISO C++引入命名空间,即一个程序设计者命名的内存区域。程序设计者根据需要指定命名空间,并将命名空间中声明的标识符和命名空间关联起来,这样就保证不同命名空间的同名标识符不发生冲突。它的一般格式:

namespace 命名空间名

{

标识符1;

标识符2;

...

}

花括号内是命名空间的作用域。其实在之前所有的章节中都用到过一个C++指定的一个标准命名空间std。是否还记得在C++的发展,特点和源程序构成这一节中的示例里用到过using namespace std语句,其含义就是使用标准命名空间std。它是单词standard的缩写,标准C++库中的所有标识符都在这个命名空间中,比如我们常用到的iostream头文件中的函数、类、对象等都在std命名空间中定义。如果要调用命名空间里的函数、类、对象等,有两种方法:(1)在原文件中使用"using namespace 命名空间名",再直接调用标识符;(2)在标识符前面加上命名空间以及作用域运算符"::";

自定义头文件university.h:

1 namespace Peking //声明命名空间Peking2 {3 int rank=47;//标识符4 }5 6 namespace Tsinghua //声明命名空间Tsinghua7 {8 int rank=54;//与Peking同名标识符9 }

使用文件university.h及命名空间:

1 #include "stdafx.h" 2 #include <iostream> 3  4 #include "university.h"//加载头文件university.h 5 usingnamespace Peking;//显式使用头文件university.h中的命名空间Peking 6  7 int main() 8 { 9     std::cout<<"世界大学排名(2010)"<<std::endl;10 11     std::cout<<"北京大学:"<<rank<<std::endl;//rank等同于Peking::rank12     std::cout<<"清华大学:"<<Tsinghua::rank<<std::endl;//标识符rank前面加上命名空间Tsinghua以及作用域运算符"::"13     14 return0;15 }

结果:

C++之命名空间(End Chapter)

最后来说说C++中头文件的命名规则,因为C++是从C语言发展而来的,为了与C兼容,C++保留了C语言中的一些规定,其中就包括用.h作为后缀的头文件,比如大家所熟悉的:stdio.h、math.h和string.h等。但后来ANSI/ISO C++建议头文件不带后缀".h"。但为了使原来编写的C++的程序能够运行,在C++程序中的头文件既可以采用不带后缀的头文件,也可以采用C语言中带后缀的头文件。在C++中使用这两种形式的头文件都可以,只不过有几个注意点需要说明一下:(1)如果C++程序中使用了带后缀".h"的头文件,那么不必在程序中声明命名空间,只需要文件中包含头文件即可;(2)C++标准要求系统提供的头文件不带后缀".h",但为了表示C++与C的头文件既有联系又有区别,C++中所用头文件不带后缀".h",而是在C语言的相应头文件名之前加上前缀c:

1 #include <cstdio>//等同于C中的#include<stdio.h>2 #include <cstring>//等同于C中的#include<string.h>3 #include <cmath>//等同于C中的#include <math.h>

End
原文链接: https://www.cnblogs.com/CaiNiaoZJ/archive/2011/08/20/2146917.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/30884

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午8:09
下一篇 2023年2月8日 上午8:10

相关推荐