命名空间C++中,头文件与命名空间的关系

命名空间  时间:2021-01-24  阅读:()

c#代码中的namespace的作用是什么?

命名空间(namespace)的作用就好比分地盘,便于集中管理,c#是完全面向对象的语言,所有对象的类型定义都必须是在某个命名空间下定义,所有的方法都必须包含类型定义中,好比人(方法)必须属于某个市(类型定义),这个市又必须属于某个省(命名空间)。

C#中的类是利用命名空间组织起来的。

命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。

命名空间声明 用namespace 关键字用于声明一个命名空间。

此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。

namespace name { 类型定义 } 其中:在命名空间中,可以声明类、接口、结构、枚举、委托 命名空间。

如果未显式声明命名空间,则会创建默认命名空间。

该默认的命名空间(有时称为全局命名空间)。

全局命名空间中的任何标识符都可用于命名的命名空间中。

命名空间声明可以作为顶级声明出现在编译单元中,当命名空间声明作为顶级声明出现在编译单元中时,该命名空间成为全局命名空间的一个成员。

命名空间声明出现在另一个命名空间声明内时,该内部命名空间就成为包含着它的外部命名空间的一个成员。

无论是何种情况,一个命名空间的名称在它所属的命名空间内必须是唯一的。

命名空间隐式地为 public,而且在命名空间的声明中不能包含任何访问修饰符。

模块与命名空间

命名空间是用来防止命名重复的。

如你要开发一个程序,引用了别人的一个dll,这个dll里有一个类名称叫Employee,而你自己又要定义一个叫Eemployee的类,如果不加以区分,就不知道使用的是哪个类了。

所以一般变成都会先定义一个命名空间,如MyProject,在这个命名空间下的类,引用的时候都可以在前面加上命名空间,如MyProject.Employee。

C++中,头文件与命名空间的关系

###################################### 有些书说有些头文件不在std里是什么意思? ###################################### 那些书那样说会造成困惑,因为名字空间,就像函数、 结构、类等等,是用代码来表达的一种语言机制。

std(standard的缩写)是标准C++里必须存在的一个 名字空间的名字。

所有实现标准C++的编译器都 必须确保这空间的存在。

名字空间声明是这样表达的: namespace x { // 创建新名字 } x是该名字空间的名字。

头文件装代码,代码表达名字空间。

所以应该说“有些头文件的内容不在std里”。

具体的意思就是,在那些头文件里, 没有任何代码是在“namespace std { }”的括号里的。

###################################### std里包含些什么? ###################################### std里包含标准C++库里的所有名字(类名、 函数名、...)。

###################################### 为什么不用std就不能使用cout? ###################################### 不是不能使用,只是不能直接写cout,必需用空间名和 名字空间限制符作为前缀,写成std::cout。

用某个名字做名字空间声明的时候,若已有同名的 名字空间存在,就是仅仅把括号里的名字加进去, 否则先创建空间,后加入括号里的名字。

加入名字空间后的名字都是对全局空间隐藏的, 但该名字空间的名字却不隐藏(除非该空间在另一个 名字空间里)。

cout隐藏在std里,但std本身不隐藏,所以 你“#include<iostream>”了之后,不必做 使用声明便可直接用std,通过它访问cout。

若你做了使用声明,对该使用声明所处的作用域的隐藏便 被抵消(作用域的开端到声明之间的那段除外), 即不必使用空间名和名字空间限制符作为前缀。

###################################### 头文件中声明的东西为什么在使用的时候需要 先using namespace std;一下? ###################################### 你已经知道做使用声明是要讨个方便而不是一种必要。

我们作个总结性的复习吧。

(A)这简单的程序里只有全局和局部空间,没有其它的名字空间: void main( ) { std::cout << ""; // 错误:std不存在。

cout << ""; // 错误:std不存在cout就不用提了。

} (B)这个则多了一个叫std的名字空间。

std这名字也可见了: #include<iostream> void main( ) { std::cout << ""; // OK:可通过std骚扰cout。

cout << ""; // 错误:cout仍然被包在std里面,不可见。

} iostream头文件里有std的声明。

在编译之前, 预处理器会用iostream里的全部内容来代替 “#include<iostream>”这个预处理器指示符。

效果是,这程序包含iostream里的所有代码。

include是包含的意思。

包含指示是在全局空间里,所以在指示之后的任何地方, std这个名字是可见、可访问的。

(C)这个不包含声明std的代码却尝试打开std包, 落了个跟(A)一样狼狈的下场: using namespace std; void main( ) { std::cout << ""; // 错误:std不存在。

cout << ""; // 错误:std不存在cout就不用提了。

} (D)这个声明了std(曝露了std)并把std打开, 让里面的名字(cin、cout、cerr、...)跟 std一样暴露。

[相信你闭上眼都能写出这段代码了]

炭云188元/年,上海CN2 VPS/2核/384MB内存/8GB空间/800GB流量/77Mbps端口/共享IP

炭云怎么样?炭云(之前的碳云),国人商家,正规公司(哈尔滨桓林信息技术有限公司),主机之家测评介绍过多次。现在上海CN2共享IP的VPS有一款特价,上海cn2 vps,2核/384MB内存/8GB空间/800GB流量/77Mbps端口/共享IP/Hyper-v,188元/年,特别适合电信网络。有需要的可以关注一下。点击进入:炭云官方网站地址炭云vps套餐:套餐cpu内存硬盘流量/带宽ip价格购买上...

tmhhost(100元/季)自带windows系统,香港(三网)cn2 gia、日本cn2、韩国cn2、美国(三网)cn2 gia、美国cn2gia200G高防

tmhhost可谓是相当熟悉国内网络情况(资质方面:ISP\ICP\工商齐备),专业售卖海外高端优质线路的云服务器和独立服务器,包括了:香港的三网cn2 gia、日本 cn2、日本软银云服务器、韩国CN2、美国三网cn2 gia 云服务器、美国 cn2 gia +200G高防的。另外还有国内云服务器:镇江BGP 大连BGP数据盘和系统盘分开,自带windows系统,支持支付宝付款和微信,简直就是专...

香港CN2云服务器 1核 2G 35元/月 妮妮云

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款到网站余额,超过2天...

命名空间为你推荐
windows优化大师怎么用Windows优化大师怎么用?优酷路由宝怎么赚钱优酷路由宝整的可以赚钱吗?可以赚多少?深圳公交车路线深圳公交线路最新qq空间代码qq空间最新免费代码打开网页出现错误网页出现错误怎么解决?要最简单的那种1433端口1433端口怎么打开安卓应用平台安卓手机下软件哪个网站好雅虎天盾我装了360安全卫士,原来的雅虎天盾需不需要卸载人人逛街过节了,这儿可真热闹写一段话cr2格式如何打开CR2格式的照片呢
免费cn域名注册 新秒杀 主机评测 国内永久免费云服务器 优key 搜狗抢票助手 qingyun 刀片服务器是什么 域名评估 vip购优惠 息壤代理 drupal安装 西安主机 qq金券 学生服务器 江苏徐州移动 亿库 湖南铁通 时间服务器 删除域名 更多