码迷,mamicode.com
首页 > 其他好文 > 详细

名称空间也可以自定义

时间:2015-09-16 12:34:16      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

名字空间的定义

 

名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。

不指定名字空间的变量或函数都是当前名字空间下的变量或函数。

不定义名字空间的情况下,都属于全局名字空间。

同一个名字空间可以定义多次。

 

名字空间定义和使用举例:

#include <iostream>

using namespace std;

namespace na

{

    void print(int n) {     //与名字空间nb的函数名相同

        cout << "na::print: " << n << endl;

    }

}

namespace nb

{

    void print(int n) {     //与名字空间na的函数名相同

        cout << "nb::print: " << n << endl;

    }

}

namespace na  // 同一个名字空间可以定义多次

{

    void print2(int a, int b) {

        print(a);

        print(b);

    }

}

int main ( )

{

    na::print(3);        // 指定na下的print函数

    nb::print(4);        // 指定na下的print函数

    na::print2(5, 6);    // 指定na下的print2函数

    return 0;

}

运行结果:

na::print: 3

nb::print: 4

na::print: 5

na::print: 6

using的使用

 

使用“using namespace”可以使得后面不需要每次指定名字空间,相当于java中的import功能。不过,多次使用“using namespace”时,被指定的名字空间同时有效,很容易冲突。

#include <iostream>

using namespace std;

namespace na

{

    void print(int a) {

        cout << "na::print: " << a << endl;

    }

}

namespace nb

{

    using namespace na;

    void print2(int a, int b) {    //这是nb自身的函数

        print(a);    //na的函数

        print(b);    //na的函数

    }

    void print(int n) {    //这也是nb自身的函数

        cout << "nb::print: " << n << endl;

    }

}

namespace nc

{

    using nb::print2;    //指定只使用nb的print2()函数

    void print(int a, int b, int c) {

        print2(a, b);    //这是nb的函数

        nb::print(c);    //using中没有指定,所以这儿必须用nb::来指定

    }

}

int main ( )

{

    using namespace na;

    print(2);    //na的print()函数

    //using namespace nb;    //这样使用时,na和nb同时有效

    //print(3);              //编译系统不清楚究竟调用na和nb中的哪一个,因为函数名和参数相同

    using namespace nc;    //这样使用时,na和nc同时有效

    print(4, 5, 6);        //nc的print()函数的参数与na中的参数不同,所以这儿不出错。

    using nb::print;       //指定下面用的print()函数是nb的函数

    print(7);

    return 0;

}

运行结果:

na::print: 2

na::print: 4

na::print: 5

nb::print: 6

nb::print: 7

用别名指定名字空间

 

名字空间可以一层层嵌套,指定时也得一层层地指定,这样很不方便,一般用别名代替就方便多了。

#include <iostream>

using namespace std;

namespace na {

    namespace nb {

        namespace nc {

            int sum(int a, int b)

            {

                return a + b;

            }

        }

    }

}

namespace A = na::nb::nc;

int main ( )

{

    cout << na::nb::nc::sum(5, 11) << endl;

    cout << A::sum(6, 12) << endl;

    return 0;

}

运行结果:

16

18

没有名字的名字空间

 

名字空间的名字也可以省略,称之为“无名名字空间”,无名名字空间经常被使用,其作用是“内部可以引用,而外部不能引用”。

#include <iostream>

using namespace std;

namespace na {

    namespace {     //无名名字空间

        int sum(int a, int b)

        {

            return a + b;

        }

    }

    int calc(int x, int y)

    {

        return sum(x, y);  //内部可以调用无名名字空间的变量或函数

    }

}

int main ( )

{

    //cout << na::sum(5, 11) << endl;  //因为缺少里面的名字,所以外部不能调用

    cout << na::calc(6, 12) << endl;

    return 0;

}

运行结果:

18

名称空间也可以自定义

标签:

原文地址:http://www.cnblogs.com/yanxiao/p/4812826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!