在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 教程/ C/ 命名空間
動(dòng)態(tài)內(nèi)存
類和對象
接口 (抽象類)
結(jié)構(gòu)體
循環(huán)的類型
函數(shù)
數(shù)字
日期和時(shí)間
基本語法
多態(tài)
數(shù)據(jù)抽象
注釋
命名空間
字符串
預(yù)處理器
決策語句
修飾符的類型
鍙橀噺綾誨瀷
基本輸入輸出
操作符
數(shù)組
模板
多線程
繼承
Web 編程
信號(hào)處理
指針
存儲(chǔ)類型
概述
引用
常量
異常處理
開發(fā)環(huán)境
重載
變量作用域
數(shù)據(jù)類型
數(shù)據(jù)封裝
文件和流

命名空間

考慮一個(gè)情況,在同一個(gè)班有兩個(gè)同名的人,都叫 Zara 。每當(dāng)我們需要區(qū)分他們的時(shí)候,除了它們的名字我們肯定會(huì)使用一些額外的信息,就像如果他們住在不同的區(qū)域或他們的母親或父親的名字,等等。

同樣的情況會(huì)出現(xiàn)在你的 C++ 應(yīng)用程序中。例如,你可能會(huì)編寫一些代碼,有一個(gè)名為 xyz() 的函數(shù),在另一個(gè)庫中也有同樣的函數(shù) xyz() ?,F(xiàn)在編譯器不知道在你的代碼中指定的是哪個(gè)版本的 xyz() 函數(shù)。

namespace就是用來克服這個(gè)困難的,而且作為附加信息來區(qū)分在不同的庫中具有相同名稱的函數(shù),類、變量等。使用命名空間,你可以定義名字已經(jīng)定義的上下文。從本質(zhì)上講,一個(gè)命名空間定義了一個(gè)范圍。

定義命名空間

一個(gè)命名空間的定義由關(guān)鍵字 namespace 加它的名稱組成,如下所示:

    namespace namespace_name {
        // code declarations
    }

調(diào)用任何函數(shù)或變量的命名空間啟用版本,前面加上命名空間名字如下:

    name::code;  // code could be variable or function.

讓我們看看命名空間如何限定實(shí)體(包括變量和函數(shù))使用范圍:

    #include <iostream>
    using namespace std;

    // first name space
    namespace first_space{
       void func(){
      cout << "Inside first_space" << endl;
       }
    }
    // second name space
    namespace second_space{
       void func(){
      cout << "Inside second_space" << endl;
       }
    }
    int main ()
    {

       // Calls function from first name space.
       first_space::func();

       // Calls function from second name space.
       second_space::func(); 

       return 0;
    }

如果我們編譯和運(yùn)行上面的代碼,這將產(chǎn)生以下結(jié)果:

    Inside first_space
    Inside second_space

using 指令

你可以通過使用 using namespace 指令來避免在頭部添加命名空間。這個(gè)指令告訴編譯器,隨后代碼要使用指定命名空間中的名稱。因此名稱空間隱含下面的代碼:

    #include <iostream>
    using namespace std;

    // first name space
    namespace first_space{
       void func(){
      cout << "Inside first_space" << endl;
       }
    }
    // second name space
    namespace second_space{
       void func(){
      cout << "Inside second_space" << endl;
       }
    }
    using namespace first_space;
    int main ()
    {

       // This calls function from first name space.
       func();

       return 0;
    }

如果我們編譯和運(yùn)行上面的代碼,這將產(chǎn)生以下結(jié)果:

    Inside first_space

using 指令也可以用來指一個(gè)名稱空間中的特定的項(xiàng)目。例如,如果你打算只是用 std 名稱空間的一部分cout,你可以進(jìn)行如下操作:

    using std::cout;

后續(xù)的代碼可以調(diào)用 cout 而不用在前面加上命名空間名字,但命名空間中的其他項(xiàng)目仍需要作如下說明:

    #include <iostream>
    using std::cout;

    int main ()
    {

       cout << "std::endl is used with std!" << std::endl;

       return 0;
    }

如果我們編譯和運(yùn)行上面的代碼,這將產(chǎn)生以下結(jié)果:

    std::endl is used with std!

using 指令引入的名字遵循正常的檢測規(guī)則。這個(gè)名字相對于從 using 指令的指針到范圍的結(jié)束是可見的,并且在這個(gè)范圍中指令可以被找到。定義在外部范圍的有相同名字的實(shí)體是被隱藏的。

不連續(xù)的命名空間

一個(gè)命名空間可以被分別定義為若干個(gè)不同部分,因此命名空間是由這些部分的合集組成。這些被分開定義的命名空間可以分散在多個(gè)文件中。一個(gè)命名空間的分離的部分可以分散在多個(gè)文件。

所以,如果命名空間的一部分需要定義在另一個(gè)文件中的名字,仍然必須聲明這個(gè)名字。定義以下命名空間實(shí)現(xiàn)定義一種新的命名空間或添加新的元素到一個(gè)現(xiàn)有的命名空間:

    namespace namespace_name {
       // code declarations
    }

嵌套的命名空間

命名空間可以被嵌套,你可以在一個(gè)命名空間內(nèi)定義另一個(gè)命名空間,如下:

    namespace namespace_name1 {
       // code declarations
       namespace namespace_name2 {
      // code declarations
       }
    }

在上面的語句中如果你使用的是 namespace name1 ,那么它將使 namespace name2 的元素在整個(gè)范圍內(nèi)可用,如下:

    #include <iostream>
    using namespace std;

    // first name space
    namespace first_space{
       void func(){
      cout << "Inside first_space" << endl;
       }
       // second name space
       namespace second_space{
      void func(){
     cout << "Inside second_space" << endl;
      }
       }
    }
    using namespace first_space::second_space;
    int main ()
    {

       // This calls function from second name space.
       func();

       return 0;
    }

如果我們編譯和運(yùn)行上面的代碼,這將產(chǎn)生以下結(jié)果:

    Inside second_space