找回密码
 立即注册
收起左侧

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

0
回复
5810
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-9-4 10:31:17 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org),作者: 女儿叫老白 (白振勇),转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
本套课程属于:《C++跨平台开发干货》系列课程。
-----------------------------------------------------------------------------
引言
-----------------------------------------------------------------------------
       在您的软件研发职业生涯中,有没有碰到过头文件命名冲突、类名称命名冲突、全局变量名称冲突等命名冲突的问题。如果没有遇到过,那可能有两种原因:
       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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了