本帖最后由 baizy77 于 2018-10-1 20:43 编辑
版权声明 --------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------- 引言 ----------------------------------------------------------------------------- 在您的软件研发职业生涯中,有没有碰到过头文件命名冲突、类名称命名冲突、全局变量名称冲突等命名冲突的问题。如果没有遇到过,那可能有两种原因: 1,您过手的项目都比较小,不会碰到这种机会。 2,您参与的项目都是大型项目,而且项目团队的软件研发管理规范化做的比较好,执行很到位。 但是,我相信很多人都碰到过这个问题,今天我们就来讨论一下命名空间的问题。
正文 ----------------------------------------------------------------------------- 中型以上项目研发时,如果研发管理不善,很容易导致研发团队出现命名冲突的情况: · 应用程序名称冲突,比如都叫做edit.exe,或command.dll。 · 类名冲突,比如都叫CMyDialog。 · 头文件名冲突,比如都叫common.h 这时候就需要进行研发规范化管理,需要指定相应的制度,比如: · 编码规范 · 模块命名管理制度 · 命名空间管理制度 · 目录组织结构规范 我们这里先讨论命名空间的问题。当大家都使用命名空间提供名称保护时,就可以保证各自的名称互不干扰。 比如,命名空间定义如下: namespace ns_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;
|