名空間

一般情況下,如果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。請注意:不能用::訪問函式中的局部變數

相關詞條

熱門詞條

聯絡我們