15-命名空間

寫在前面

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:DDGLearningCppgit

相關文章
相關標籤/搜索