命名空間(namespace)

隨著程式內容越來越大,可能發生類別同名的問題,例如在程式某個地方定義Point類別代表空間的點,也許在其他地方,Point類別有不同的意義,或者是函式、變數發生同名的情況,當這種情況發生時,其中一個定義可能被另一個給覆寫掉了。

C++提供名稱空間的概念,它就像是一個名稱管理容器,像假如定義了2d與3d的名稱空間,雖然它們之下都有一個Point類別,但由於屬於不同的名稱空間,所以這兩個名稱並不會衝突。

C++使用namespace關鍵字來定義一個名稱空間,名稱空間中的成員,可以直接使用當中所宣告的識別字,但如果要在名稱空間之外使用這些成員,則要指定名稱空間,以下為名稱空間的使用。

namespace 2d { 
    class Point{
    public: 
        int m_x;
        int m_y; 
        Point(){
            m_x = 0; 
            m_y = 0;
        } 
        Point(int x, int y){
            m_x = x; 
            m_y = y;
        }
    };
};

int main(){
    2d::Point myPoint(3,7);
    int a = myPoint.m_x;     //a=3
    return 0;
}

可以使用using關鍵字指明所要使用的名稱空間或其下的成員,則被指定的名稱空間或包含的成員就可以直接被使用,有以下兩種用法:

using 名稱空間::成員 
using namespace 名稱空間

C++的標準函式庫皆定義在std名稱空間中,所以想使用的話,必須在檔案的最前頭加上using namespace std;,或者是在函式前加上std::。