15-命名空间

276 阅读2分钟

写在前面

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