其它综合

名称空间也可以自定义

我爱IT资讯库   2021/02/23

名字空间的定义

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

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

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

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

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

#includelt;iostreamgt;

usingnamespacestd;

namespacena

{

voidprint(intn){//与名字空间nb的函数名相同

coutlt;lt;"na::print:"lt;lt;nlt;lt;endl;

}

}

namespacenb

{

voidprint(intn){//与名字空间na的函数名相同

coutlt;lt;"nb::print:"lt;lt;nlt;lt;endl;

}

}

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

{

voidprint2(inta,intb){

print(a);

print(b);

}

}

intmain()

{

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

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

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

return0;

}

运行结果:

na::print: 3

nb::print: 4

na::print: 5

na::print: 6

using的使用

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

#includelt;iostreamgt;

usingnamespacestd;

namespacena

{

voidprint(inta){

coutlt;lt;"na::print:"lt;lt;alt;lt;endl;

}

}

namespacenb

{

usingnamespacena;

voidprint2(inta,intb){//这是nb自身的函数

print(a);//na的函数

print(b);//na的函数

}

voidprint(intn){//这也是nb自身的函数

coutlt;lt;"nb::print:"lt;lt;nlt;lt;endl;

}

}

namespacenc

{

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

voidprint(inta,intb,intc){

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

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

}

}

intmain()

{

usingnamespacena;

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

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

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

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

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

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

print(7);

return0;

}

运行结果:

na::print: 2

na::print: 4

na::print: 5

nb::print: 6

nb::print: 7

用别名指定名字空间

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

#includelt;iostreamgt;

usingnamespacestd;

namespacena{

namespacenb{

namespacenc{

intsum(inta,intb)

{

returna+b;

}

}

}

}

namespacea=na::nb::nc;

intmain()

{

coutlt;lt;na::nb::nc::sum(5,11)lt;lt;endl;

coutlt;lt;a::sum(6,12)lt;lt;endl;

return0;

}

运行结果:

16

18

没有名字的名字空间

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

#includelt;iostreamgt;

usingnamespacestd;

namespacena{

namespace{//无名名字空间

intsum(inta,intb)

{

returna+b;

}

}

intcalc(intx,inty)

{

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

}

}

intmain()

{

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

coutlt;lt;na::calc(6,12)lt;lt;endl;

return0;

}

运行结果:

18

名称空间也可以自定义

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




热门内容

从量价变化中洞察主力意图

从量价变化中洞察主力意图

成份B指(399003.SZ) <script language="JavaScript" typ... ...
android 继承view类刷新页面【安卓进化十一】

android 继承view类刷新页面【安卓进化十一】

       最近做项目中发现,继承了view类的子类... ...

C# XmlSerializer 对象的Xml序列化和反序列化

    .Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在... ...

hdu-1286找新朋友(欧拉函数,水题)

题目链接: 找新朋友 time limit: 2000/1000 ms (java/others)memory limi ...

java程序 处理 andrid本地帮助文档打开慢的方式

    下载本地的android自带sdk帮助文档由于有被墙的google地址,可以通... ...

RTTI学习笔记

翻看C++的书,对RTTI的讲解都很困惑,"你知道你的对象是哪个类吗","RTTI常用于调试和数据库程序"对这些讲... ...

使用axis2传输附件

服务端Service文件: import java.io.FileOutputStream; import jav... ...

sql server 的行转列

sql server中行转列在sql2005之后,sqlserver引入了pivot运算符,也即是可以旋转行为列,... ...
【Node.js基础篇】(九)使用readline模块实现Node.js的输入输出

【Node.js基础篇】(九)使用readline模块实现Node.js的输入输出

学C++的时候,有cout和cin,Java也有println和Scanner控件,Node.js也有如同... ...
iOS 应用支持4寸屏

iOS 应用支持4寸屏

iPhone 5出了,一大批应用要兼容新的分辨率,下载了Xcode 4.5,在官方那里找不到有关兼容新分辨... ...

循环执行oracle到mysql的迁移步骤及各种注意事项

改章节笔者在北京逛街的时候突然想到的...今天就有想写几篇关于循环执行的笔记,所以回家到之后就奋笔疾书的写出来发表了 ... ...
2015收获的季节

2015收获的季节

—————————————————————前言————————————————————— ———————... ...

JSP中的pageEncoding和contentType属性

关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是js... ...

对XX证券报关于物联网操作系统的几个问题的答复

XX证券报提问了几个关于物联网和物联网操作系统的问题,个人表达了一些粗陋的观点,在这里发表出来,与行业朋友交流和探... ...
In语句优化

In语句优化

In语句的优化 现有两张表: CLINIC_ORGANISM 数据量:1400 LAB_DRUGRESISTITE... ...
fuzzysearch, 在JavaScript中,快速而快速的模糊搜索

fuzzysearch, 在JavaScript中,快速而快速的模糊搜索

源代码名称:fuzzysearch源代码网址:http://www.github.com/bevacqua/fuzzys ...

SQL Server里的 ISNULL 与 NULLIF

SQL Server 中有两个参数,语法:     ISNULL(check_... ...

判断SD是否存在及其容量查询

这个非常简单,直接上代码: MainActivity: package com.home.getsdinf... ...

Python:如何排序(sort)

一、前言 python的列表(list)有两个排序方法: 一种是内建的list.sort()方法,可以直接改变列表的内容 ...

boost库在工作(5)作用域智能指针scoped_ptr之四

第二种情况,主要就是使用在调用异常抛出的函数的地方。如下面的例子: //异常抛出的函数,适合使用智能指针... ...

Error:couldnotopen`C:\ProgramFiles\Java\jre6\lib\i386\jvm.cfg'

昨天刚过情人节!哈哈,好久没记录学习内容了,今天在房子闲着没事重新安装jdk,按道理很简单的; 第一步下载jdk; ...

第49周二

晚上总结下今天,主要是在完善用户需求文档,同时看了jquery相关的操作技巧,主要是想学习jquery源码,在知乎jqu ...

C++ #include 和 using std::string

今天,偶尔写了一个小小的程序,关于字符串问题程序。 比如,我想连续打印用户输入的字符串。 #include&l... ...

Struts Hibernate Spring 经典面试题

Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Ses... ...

SAP Performance浅析

本文来源于:http://scnblogs.techweb.com.cn/tcsapbw/archives/106... ...

数据库MySQL与xls文件的互导

      最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到... ...

Head-of-Line Blocking (线头阻塞)

Head of Line (HOL) Blocking 产生的原因: 概念:队列的首个packet由于它的目的... ...

Python set的高效利用

python set的应用   ... ...

CollectionFrameWork

collectionframework如下: collection ├list │├linkedlist │├array ...

JAVA访问修饰符构造函数的问题(转)

java访问修饰符 构造函数的问题 java访问修饰符-限定符总结(类比c#) java访问修饰符--------- ...