写在前面
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
网友评论