美文网首页
15-命名空间

15-命名空间

作者: _东阁堂主_ | 来源:发表于2019-02-19 11:19 被阅读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

    相关文章

      网友评论

          本文标题:15-命名空间

          本文链接:https://www.haomeiwen.com/subject/glexyqtx.html