名称空间也可以自定义

名字空间的定义

名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“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

时间: 2024-08-06 03:45:39

名称空间也可以自定义的相关文章

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

day18 函数定义、参数;名称空间;全局变量及局部变量。

Python之路,Day6 = Python基础6 函数的定义 def func1(): # 定义一个函数,名字叫func1,括号中没有传入参数 print('hello word') # 这里是 func1 的内容,可以定义为任意代码 return 1 # return 是返回的意思,后面是返回值,调用时可以用参数接收,返回值的内容可以为任意形式 # python执行的时候只会检查函数里面是否有语法问题,没有的话,过... # 函数中可以有多个return, 但是执行到return时,函数停止

WPF名称空间

一 C#名称空间 C#中,将类组织在合适的名称空间中,这样便可以在不同的名称空间中创建同名的类,而在使用同名类时,需要指定类是属于哪一个名称空间,以此来区别不同的同名类.这就像,1班有一个"张伟",2班也有一个"张伟",为了区分这两个同名的"张伟",必须加上"1班的"或者"2班的"限定条件一样,名称空间就是此处用来区别同名"张伟"的限定条件,它的作用就是避免同名的冲突. 下面通过一个简单

iproute2使用及网络名称空间

创建一个网络名称空间: 相当于创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables,等等.总之,与网络有关的组件都是独立的. 1,基础iproute2命令 *显示所有网络接口 ip link show ip link ip addressip address show dev eth1 *对一个网络接口添加或者删除ip地址 sudo ip address add 10.0.1.1/24 dev veth0 #添加ip地址s

[No000013F]WPF学习之X名称空间详解

原文:[No000013F]WPF学习之X名称空间详解 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:http://schemas.microsoft.com/winfx/2006/xaml,望文生义,它包含的类均与解析XAML语言相关,所以亦称之为“XAML名称空间”. 与C#语言一样,XAML也有自己的编译器.XAML语言被解析并编译,最终形成微

K8S的名称空间创建&amp;&amp;版本的升级、回滚操作(回滚到指定版本)

创建一个私有仓库. #运行一个registry容器 [[email protected] ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest #在所有需要使用私有仓库的的节点上进行以下配置: [[email protected] ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H un

python基础13——名称空间与作用域

昨日review 0: 引用传递 python中所有值的传递,传递的都是不是值本身,而是值的引用,即内存地址 1.函数分为两大类,分别是是什么?二者在使用时有何区别? 内置函数 自定义函数 2.什么是形参.什么是实参?形参与实参之间的关系是什么? def func(x,y): print(x) func(1,2) 3.简述两只形参的区别:位置形参.默认形参 x=[] def func(name,age,gender=None):                                 #

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内