当前位置:首页 科普知识 名空间

名空间

发布时间:2023-09-14 00:44:10

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

名空间介绍

一般情况下,如果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。请注意:不能用::访问函数中的局部变量。

温馨提示:
本文【名空间】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6