词条 | 名空间 |
释义 | 一般情况下,如果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。请注意:不能用::访问函数中的局部变量。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。