複製鏈接
請複製以下鏈接發送給好友

名空間

鎖定
一般情況下,如果c++中出現兩個變量、函數名、類名完全相同時,就會產生衝突。解決命名衝突的辦法傳統的做法是重新使用不同的標識符。但又是這樣做有時反而降低程序的可讀性,因此c++提供了第二種解決命名衝突的方法——名空間。將這些名字相同的變量、函數和類定義在不同的名空間中,問題就解決了。需要注意的是,同一個名空間中標識符須是唯一的。
中文名
名空間
名空間定義
c++的關鍵字namespace引導
應    用
定名空間是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。請注意:不能用::訪問函數中的局部變量