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