- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
命名空间namespace
#includeiostream
intrand=0;
intmain()
{
printf(%d,rand);
return0;
}
上述代码一定会出现以下情况:
原因:自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东西跟库
函数的东西重复了。这种错误就是命名冲突。
命名冲突问题:
我们自己定义的变量、函数可能跟库里面重名冲突。
进入公司项目组后,做的项目通常比较大,多人协作,可能命名冲突。
C语言没有办法很好的解决这个问题。
C++提出了一个新语法:命名空间
命名空间的定义
对于上面的问题我们使用命名空间来解决:
#includeiostream
namespacezzy
{
intrand=0;
}
intmain()
{
printf(%d,zzy::rand);
return0;
}
我们使用namespace来划定一个区域,叫做域,域的名字叫zzy(名字可以自己定义,但是最好不要
跟库已有的重复)。这个域就像是隐身衣一样,让系统编译的时候不会去这个区域里面读取。
::为域作用限定符,前面是命名空间的名称,后面是命名空间里的变量、类型、函数等。使用这个限
定符来指定我们使用的是哪个命名空间里的变量
需要注意的一点是,命名空间是全局的,必须要写在main函数的外边。
下面举些例子来帮大家更清晰的了解命名空间:
1.函数定义在命名空间里
#includeiostream
namespacezzy
{
intAdd(intx,inty)
{
returnx+y;
}
}
intmain()
{
printf(%d\n,zzy::Add(1,2));
return0;
}
如果把函数的定义写在命名空间的外面,而函数声明在命名空间里面会怎么样?由于命名空间会屏蔽
掉,相当于你没有写这个声明。但是如果你的函数定义写在main函数的上面就没什么问题了。
#includeiostream
namespacezzy
{
intAdd(intx,inty);
}
intAdd(intx,inty)
{
returnx+y;
}
intmain()
{
printf(%d\n,/*zzy::*/Add(1,2));
return0;
}
一点要注意,这个时候你不可以写zzy::了,因为如果你这么写的话系统会优先去zzy命名空间里去寻
找,发现只有函数的声明,没有函数的定义,所以是没结果的。
2.对全局变量使用命名空间
#includeiostream
inta=0;
intmain()
{
inta=10;
printf(%d,::a);//使用全局作用域的a,::前面的没有东西代表全局作用域
}
3.命名空间的嵌套
#includeiostream
namespacezzy
{
inta=10;
namespaceN1
{
intb=20;
}
}
intmain()
{
printf(%d\n,zzy::a);
printf(%d\n,zzy::N1::b);
}
4.using命名空间
我们发现,每次使用一些命名空间里的变量总是要加上”命名空间名称::”,当变量多时,就会显得
很繁琐。所以我们可以这么做:
文档评论(0)