王朝百科
分享
 
 
 

名空间

王朝百科·作者佚名  2010-03-14  
宽屏版  字体: |||超大  

一般情况下,如果c++中出现两个变量、函数名、类名完全相同时,就会产生冲突。解决命名冲突的办法传统的做法是重新使用不同的标识符。但又是这样做有时反而降低程序的可读性,因此c++提供了第二种解决命名冲突的方法——名空间。将这些名字相同的变量、函数和类定义在不同的名空间中,问题就解决了。需要注意的是,同一个名空间中标识符须是唯一的。

名空间定义用c++的关键字namespace引导,定义格式:

namespace 名空间标识符名

{

成员的声明

}

名空间成员的访问:

使用名空间成员时需用名空间名进行标识,从而解决了标识符的冲突。名空间成员访问方式如下

名空间标识符名::成员名

名空间的应用

可以指定名空间是C++的新特性,在使用STL类库时经常用到这么一句:using namespace std;

该语句的含义是使用名空间std。使用名空间可以帮助开发程序人员在开发新的软件组件时不会和已有软件组件产生标识符命名冲突。

C++中,头文件可以可以使旧版本的*.h,也可以

不带.h扩展名的头文件。编译预处理指令可以采用任何一种形式的头文件方式,但两种头文件不能混合使用。在应用名空间时,使用编译预处理命令包含相关头文件时,应省略头文件后缀.h,例如使用iostream.h的方法如下:

#include<iostream>

应用举例:

例一:

#include<iostream>

#include<string>

using namespace std;//指示在本程序中可以使用c++标准类库中定义的名字,std是标准名空间名,在标准头文件中声明的函数、对象和类模板,都在名字空间std中声明

namespace A//用关键字定义名字空间A

{

string user_name="namespace A";

int fun()

{

int n=18;

return n;

}

void Display()

{

cout<<"In namespace A……"<<endl;

}

}

namespace B

{

string user_name="namespace B";

int fun()

{

int n=28;

return n;

}

void Display()

{

cout<<"In namespace B……"<<endl;

}

}

int main(void)

{

cout<<A::user_name<<endl;

cout<<"n="<<A::fun()<<endl;

A::Display();

cout<<endl;

cout<<B::user_name<<endl;

cout<<"n="<<B::fun()<<endl;

B::Display();

cout<<endl;

return 0;

}

例二:

#include<iostream>

using namespace std;

int main(void)

{

std::cout<<"This is a C++ program!"<<endl;

return 0;

}

C++中为什么增加“名空间”和“作用域”?

C语言中规定每个变量都有其有效地作用域,只能在变量的作用域内使用该变量,不能使用其他作用域中的变量。例如:

float a=13.5;

void main()

{

int a=5;

cout<<a;

}

程序中有两个a变量:一个是全局变量a,实型;另一个是main函数中的整型变量a,它是在main函数中有效的局部变量。根据规定在main函数中局部变量讲屏蔽同名的全局变量。因此上述的输出是局部变量a的值5,而不是全局实型变量a的值13.5.如果想输出全局实型变量的值,有什么办法呢?c++提供了作用域运算符::,它能指定所需要的作用域。

float a=13.5;

void main()

{

int a=5;

cout<<a<<endl;

cout<<::a<<endl;

}

::a表示全局变量a。请注意:不能用::访问函数中的局部变量。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
中国古代四大美女:背后隐藏惊人秘密
 女性   2025-06-20
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有