baizy77 发表于 2018-9-4 10:31:17

C++老鸟日记006命名空间及使用

本帖最后由 baizy77 于 2018-10-1 20:43 编辑

版权声明---------------------------------------------------------------------------------------------------------------------该文章原创于Qter开源社区(www.qter.org),作者: 女儿叫老白 (白振勇),转载请注明出处!---------------------------------------------------------------------------------------------------------------------课程目录:《C++老鸟日记》目录本套课程属于:《C++跨平台开发干货》系列课程。-----------------------------------------------------------------------------引言-----------------------------------------------------------------------------       在您的软件研发职业生涯中,有没有碰到过头文件命名冲突、类名称命名冲突、全局变量名称冲突等命名冲突的问题。如果没有遇到过,那可能有两种原因:       1,您过手的项目都比较小,不会碰到这种机会。       2,您参与的项目都是大型项目,而且项目团队的软件研发管理规范化做的比较好,执行很到位。       但是,我相信很多人都碰到过这个问题,今天我们就来讨论一下命名空间的问题。
正文-----------------------------------------------------------------------------       中型以上项目研发时,如果研发管理不善,很容易导致研发团队出现命名冲突的情况:·      应用程序名称冲突,比如都叫做edit.exe,或command.dll。·      类名冲突,比如都叫CMyDialog。·      头文件名冲突,比如都叫common.h这时候就需要进行研发规范化管理,需要指定相应的制度,比如:·      编码规范·      模块命名管理制度·      命名空间管理制度·      目录组织结构规范我们这里先讨论命名空间的问题。当大家都使用命名空间提供名称保护时,就可以保证各自的名称互不干扰。比如,命名空间定义如下:namespacens_common {
class CMyDialog{……};
}// namespace ns_common
请注意命名空间的语法,a. 命名空间需要用一对花括号{}将需要保护的名称或代码包括进来。b. 同类定义不一样,命名空间结束时,没有结尾的分号”;”c. 不能将main()函数包含到命名空间内部。
在代码中使用命名空间中的类时,需要用如下的语法:ns_common::CMyDialogdlg;也就是:命名空间的名称::类名       -------------------------------------------------------------------       为了防止名称污染,在使用命名空间时,也要防止引入整个命名空间,方法如下:a.    头文件中仅引入命名空间中需要的类,比如:正确的写法:#include<iostream>using std::cout;using std::endl;
错误的写法:#include<iostream>using namespacestl;
b.    头文件中,用到命名空间的类时,采用: 命名空间名称::类名 的语法,比如int getCount(ns_common::CMyDialog& dlg);
cpp文件中,可以使用using namespace stl;
页: [1]
查看完整版本: C++老鸟日记006命名空间及使用