15-名稱空間

東閣堂主發表於2019-02-19

寫在前面

namespace 在之前見到過這個名詞
複製程式碼

名詞解釋

名稱空間:實際上就是一個由程式設計者命名的記憶體區域,
程式設計者可以根據需要指定一些有名字的空間域,
把一些全域性實體分別放在各個名稱空間中,
從而與其他全域性實體分隔開來。 
複製程式碼

碼上建功

1,如何使用
namespace NP {
    int g_no;

    class Person {
    public:
        int m_age;
    };
    void test() {
        cout << "NP::test()" << endl;
    }
}

namespace DD {
    int g_no;

    class Person {
    public:
        int m_height;
    };

    void test() {
        cout << "DD::test()" << endl;
    }
}

如上面兩個名稱空間 NP DD
都有屬性g_no,但是使用的時候相互不影響

誰的名稱空間,然後跟著:: 兩個冒號,跟著屬性或是方法
NP::g_no = 1;
DD::g_no = 2;

NP::Person *p1 = new NP::Person();
p1->m_age = 10;

DD::Person *p2 = new DD::Person();
p2->m_height = 180;

NP::test();
DD::test();

看下列印結果:
test()
NP::test()
DD::test()
簡單的使用就是這麼簡單

複製程式碼

名稱空間的巢狀

名稱空間也可以巢狀
namespace DD {
    namespace SS {
        int g_no;
        class Person {
        };
        void test() {
        }
    }
    void test() {
    }
}

// 預設的名稱空間,沒有名字
::DD::SS::g_no = 30;
cout << "::DD::SS::g_no--" << ::DD::SS::g_no << endl;
DD::SS::g_no = 20;
cout << "DD::SS::g_no--" << DD::SS::g_no << endl;
using namespace DD;
SS::g_no = 30;
cout << "SS::g_no--" << SS::g_no << endl;
using namespace DD::SS;
g_no = 10;
cout << "g_no--" << g_no << endl;

列印結果:
::DD::SS::g_no--30
DD::SS::g_no--20
SS::g_no--30
g_no--10

複製程式碼

分離的檔案也支援名稱空間

有個預設的全域性名稱空間,我們建立的名稱空間預設都巢狀在它裡面

建立兩個名稱空間
namespace DD {
    Car::Car() {
         cout << "DD::Car()" << endl;
    }
    
    Car::~Car() {
         cout << "DD::~Car()" << endl;
    }
}


namespace DD {
    Person::Person() {
         cout << "DD::Person()" << endl;
    }
    
    Person::~Person() {
         cout << "DD::Person()" << endl;
    }
}

呼叫
DD::Car car;
DD::Person person;
列印結果
DD::Car()
DD::Person()
複製程式碼

名稱空間的合併

namespace DD {
    int g_no;
}
namespace DD {
    int g_height;
}
DD::g_no = 10;
cout << "DD::g_no--" << DD::g_no << endl;
DD::g_height = 20;
cout << "DD::g_height--" << DD::g_height << endl;
列印結果
DD::g_no--10
DD::g_height--20

namespace DD {
    int g_no;
    int g_height;
}
DD::g_no = 10;
cout << "DD::g_no--" << DD::g_no << endl;
DD::g_height = 20;
cout << "DD::g_height--" << DD::g_height << endl;
列印結果
DD::g_no--10
DD::g_height--20
所以上述兩個是一樣的結果,是等價的
複製程式碼

完整程式碼demo,請移步GitHub:DDGLearningCpp

相關文章