1、什么是命名空间

简而言之:划片取名

加入有两个公司,公司A里面有一个员工小明,公司B里面有一个员工小明,两个公司在同一栋楼。这时,你去找小明,你再楼下大喊:“小明!你给我下来!”,这时两个小明都会下来,但是你如果喊:“A公司的小明,你给我下来”,这时下来的肯定就是A公司的小明了。而公司A和公司B就是命名空间。

2、程序中的命名空间

A软件公司:                                                  B软件公司:

  程序库里有:变量A             程序库里有:变量X

          函数f1                   函数f1

          函数f2                   函数f3

想一想:C软件公司如果购买了A公司和B公司的程序库,想使用A公司的变量 x,B公司的函数 f1 怎么办?

这个时候就用到了命名空间。

注意:命名空间的名字不能相同

3、怎样定义命名空间

命名空间关键字:namespace

namespace A        // A 就是空间的名称,也就是公司A的程序库
{
int x = ; // 公司A程序库里面的 变量x
void f1(); // 公司A程序库里面的 函数f1()
void f2(); // 公司A程序库里面的 函数f2()
}
namespace B        // B就是空间的名称,也就是公司B的程序库
{
int x = ; // 公司B程序库里面的 变量x
void f1(); // 公司B程序库里面的 函数f1()
void f2(); // 公司B程序库里面的 函数f2()
}

这个时候如果C公司调用A公司的变量和B公司的函数,代码应该怎么写呢?

cout << A::x << endl; // 调用A里面的变量x
B::f1(); // 调用B里面的f1函数

4、代码实例

(1)没有命名空间时的代码

#include<stdlib.h>

int main(void)
{
system("pause"); // pause 暂停
return ;
}

运行结果:

(2)cin,cout 的命名空间

#include<stdlib.h>
#include<iostream> // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
// std 是命名空间,里面包含cin , cout int main(void)
{
cout << "Hello" << endl; // 使用 cout 时需要命名空间 system("pause"); // pause 暂停
return ;
}

运行结果:

(3)模拟C公司调用A公司和B公司的代码

情况一:

#include<stdlib.h>
#include<iostream> // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
// std 是命名空间,里面包含cin , cout // A 就是空间的名称,也就是公司A的程序库
namespace A
{
int x = ;
void f1()
{
cout << "namespace A" << endl;
}
} // B 就是空间的名称,也就是公司B的程序库
namespace B
{
int x = ;
void f1()
{
cout << "namespace B" << endl;
} } int main(void)
{ cout << A::x << endl; // 调用A里面的变量x
B::f1(); // 调用B里面的f1函数 system("pause"); // pause 暂停
return ;
}

情况二:

#include<stdlib.h>
#include<iostream> // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
// std 是命名空间,里面包含cin , cout // A 就是空间的名称,也就是公司A的程序库
namespace A
{
int x = ;
void f1()
{
cout << "namespace A" << endl;
}
} // B 就是空间的名称,也就是公司B的程序库
namespace B
{
int x = ;
void f1()
{
cout << "namespace B" << endl;
} }
// 如果这里直接使用using namespace B;那么下面可以直接调用B里面的函数。
using namespace B;
int main(void)
{
cout << A::x <<endl;
f1();
system("pause");
return ; }

两种情况的运行结果一样:

5、实战练习

题目要求:

定义一个命名空间为myNum,在该命名空间中定义一个整型变量x,并给该变量赋值为105;使用C++新特性判断myNum命名空间下的变量是奇数还是偶数。

#include<stdlib.h>
#include<iostream>
using namespace std; namespace myNum //填写命名空间的关键字
{
int x = ;
}
int main()
{
// 使用bool类型定义isOdd,作为状态位
bool isFlag = false; if(myNum::x % == )
{
//改变状态位的值,使其为false
isFlag = false;
}
else
{
//改变状态位的值,使其为true
isFlag = true;
}
// 判断状态位的值
if(true)
{
// 如果状态位的值为true,则打印变量x是奇数
cout << myNum::x << " 是奇数" << endl;
}
else
{
// 如果状态位的值为false,则打印变量x是偶数
cout << myNum::x << " x是偶数" << endl;
} system("pause");
return ;
}

运行结果:

C++ namespace命名空间的更多相关文章

  1. 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)

    本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同,比 ...

  2. XML Namespace 命名空间

    根据 Namespaces in XML W3C 推荐标准的定义,XML 命名空间 是由国际化资源标识符 (IRI) 标识的 XML 元素和属性集合:该集合通常称作 XML“词汇”. 定义 XML 命 ...

  3. 第一章 01 namespace 命名空间

    一.什么是namespace? namesapce是为了防止名字冲突提供的一种控制方式. 当一个程序需要用到很多的库文件的时候,名字冲突有时无法避免.之前的解决思路是使用更长的变量名字,使用不方便. ...

  4. 关于JavaScript的namespace命名空间

    写C或者JAVA习惯的人写JavaScript时可能会发现JavaScript并没有命名空间这一概念,当然如果没有接触过命名空间的程序猿(比如写js,PHP,Python)也可能对命名空间不关注或者不 ...

  5. c++ namespace命名空间详解

    What is a namespace? A namespace defines an area of code in which all identifiers are guaranteed to ...

  6. namespace命名空间

    在讨论如何使用命名空间之前,必须了解 PHP 是如何知道要使用哪一个命名空间中的元素的.可以将 PHP 命名空间与文件系统作一个简单的类比.在文件系统中访问一个文件有三种方式: 相对文件名形式如foo ...

  7. 02C++namespace命名空间

    一.C++命名空间基本常识 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. 1.<iostream>和&l ...

  8. 关于js中namespace命名空间模式

    命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀. 关于命名空间的例子: /** * 创建全局对象MYAPP * @module MYAPP * @title ...

  9. php中的namespace 命名空间

    名字解释: namespace(命名空间),命名空间是从php5.3开始支持的功能.作用主要有两个:1.可以避免类名取得过长.2.当在多个框架配合使用时,同名的类之间不会冲突. 命名空间,看名字就知道 ...

随机推荐

  1. Saiku_学习_01_saiku安装与运行

    一.下载saiku 1.下载地址 官网:https://community.meteorite.bi/ 2.解压后文件结构 3.ROOT和saiku 在tomcat/webapp 下有两个web应用, ...

  2. Tushare安装

    在python中安装tushare踩坑记录一下: 安装 lxml requests bs4 pandas 不然一直提示错误.

  3. 2015年蓝桥杯省赛B组第3题--三羊献瑞

    三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉   +   三 羊 献 瑞 -------------------    三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的 ...

  4. hibernate一对一关联

    hibernate一对一主键关联 一对一主键关联指的是两个表通过主键形成的一对一映射. 数据表要求:A表的主键也是B表的主键同时B表的主键也是A表的外键 sql: create table peopl ...

  5. Objective-C 类别(category)和扩展(Extension)

    1.类别(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...

  6. java设计模式 略版

    <转> 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结 ...

  7. SWIFT模糊效果

    首先创建一个模糊效果 let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 接着创建一个承载模糊效果的视图let blurView ...

  8. Unity 3D游戏-贪吃蛇类游戏源码:重要方法和功能的实现

    贪吃蛇类游戏源码 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 头部移动方式 2 生成 Shit 道具 ...

  9. touch事件(寻找触摸点 e.changedTouches)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  10. 拒绝了对对象 '****'(数据库 '******',所有者 '***')的 SELECT 权限

    数据库(xxx) --->安全性---->架构---->dbo(属性)--->权限--->添加--->浏览-->public 添加 select 等您需要的权 ...