C++ 比 C语言增加的新特性 3 之 命名空间namespace

1. 命名空间

1.1 命名空间

又称为“名字空间”,在内存(全局)中取一块区域并对其进行命名

实际例子:

同一个班级,两个同姓的人,例如:张三和张三,其中一个张三座位是在讲台右边,另外 一个张三座位是在讲台左边(将两个张三,放置在不同的区域里)

程序中,有两个一样的标识符(两个变量),编译器会提示标识符重名的问题,如何解决:将两个标识符放在不同的区域中

C++中的解决:

使用命名空间解决标识符重名的问题

1.1.1 有名空间

关键字:namespace

声明格式:	namespace   命名空间的名称    //名称符合C/C++语法规范即可{//代码}
1.1.1.1 直接访问:访问命名空间中指定的内容

符号:“  ::   ”,域作用符号

格式:

命名空间名称   ::    命名空间里的内容;

例如:

namesapce  zhangsan{int  a=10;}zhangsan::a   //访问名字空间中的变量a

main1.cpp


//直接访问有名空间中的变量
int a = 10;void function()
{cout << "全局函数function" << endl;
}void function1()
{cout << "这是全局的function1函数" << endl;
}
//有名空间
namespace zhangsan
{int a = 20;void function(){cout << "命名空间zhangsan中的function函数" << endl;}
}//无名空间
namespace
{void function4(){cout << "这是无名的名字空间的function4()" << endl;}
}int main()
{cout << "全局的a="<<a << endl;cout << "张三命名空间的a=" << zhangsan::a << endl;function();function1();zhangsan::function();//访问有名空间函数::function4();//访问无名空间函数return 0;
}

1.1.1.2 通过using关键字访问命名空间中指定的内容

关键字:using

格式:

using  命名空间名称    ::    命名空间中的内容;//将命名空间中的内容导入到using所在的空间中

例如:

using  zhangsan ::a;

main1.cpp

//通过using关键字访问命名空间中指定的内容
namespace lisi
{int sum = 30;int num = 40;
}using lisi::sum; //将sum变量导入到当前作用域中
using lisi::num;  //注释(取消)快捷键:ctrl+shift+/
int main()
{cout << "sum=" << sum << endl;cout << "num=" << num << endl;return 0;
}

1.1.1.3 通过using和namespace关键字访问命名空间中所有的内容

关键字:using、namespace

格式:

using   namespace   命名空间的名称  ;   //将命名空间里的所有内容导入到using\namespace所在的作用域(空间)中

例如:

using namespace zhangsan;
main1.cpp
//通过using和namespace关键字访问命名空间中所有的内容
namespace lisi {int b = 30;}using namespace lisi;
int main()
{cout << "b = " << b << endl;
}

1.1.1.4 命名空间也支持嵌套

格式:

        namespace      名称1

        {

                namespace  名称2

                {

                        namespace 名称3

                        {

                                ............

                         }

                   }

        }

main1.cpp

//命名空间也支持嵌套
namespace name1
{int  a = 30;namespace name2{int a = 40;namespace name3{int a = 50;}}
}int main()
{cout << "name1  a=" << name1::a << endl;cout << "name2  a=" << name1::name2::a << endl;cout << "name3  a=" << name1::name2::name3::a << endl;return 0;
}

1.1.1.5 练习

有相同的函数,一个函数实现1 +2+3+ ... +n的和,个函数实现1 +2+3+ .. +n和的平均数,在main函数调用这两个函数,分别打印他们的和和和的平均数

main2.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "iostream"
using namespace std;//命名空间
//有相同的函数, - 个函数实现1 + 2 + 3 + ... + n的和, - 个函数实现1 + 2 + 3 + .. + n和的平均数
// , 在main函数调用这两个函数,分别打印他们的和和和的平均数int sum() {int num = 0;int n = 0;printf("请输入一个数:");scanf("%d",&n);for (int i = 1; i <= n;i++) {num += i;}return num;
}namespace space2 {float sum() {int num = 0;int n = 0;printf("请输入一个数:");scanf("%d",&n);for (int i = 1; i <= n; i++) {num += i;}return num/(float)n;}
}int main()
{cout << "全局的num=" << sum() << endl;cout << "命名空间的num=" << space2::sum() << endl;return 0;
}

1.1.2  无名空间

注:全局作用域其实质就是一个无名的名字空间

关键字:namespace
声明格式:	namespace     {//代码}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/298530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tg5032skn:高稳定性105℃高温

TG5032SKN是一款频率范围10MHz ~ 54MHz,具有高稳定的TCXO晶振&#xff0c;可与CMOS或裁剪正弦输出。外部尺寸5.0 3.2 1.45mm&#xff0c;超小型,质地轻。该系列晶振的额定工作范围-40℃~&#xfe62;105C内可高稳定性工作&#xff0c;使得信号频率的误差很小。。TG5032SKN与其…

电赛论文模板

2023全国大学生电子设计大赛 &#xff08;E 题&#xff09; 【本科组】 2023年8月5日 运动目标控制与自动追踪系统 摘 要 本设计以基于意法半导体与ARM公司生产的STM32F103RCT6单片机为控制核心&#xff0c;配合LM2596S降压模块&#xff0c;OPENMV&#xff0c;OLED显示屏&…

2023年小型计算机视觉总结

在过去的十年中&#xff0c;出现了许多涉及计算机视觉(CV)的项目&#xff0c;无论是小型的概念验证项目还是更大规模的生产应用。应用计算机视觉的方法是相当标准化的: 1、定义问题(分类、检测、跟踪、分割)、输入数据(图片的大小和类型、视野)和类别(正是我们想要的) 2、注释…

Isaac Sim urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

IntelliJ IDEA快捷键和重要设置、vscode快捷键和使用

文章目录 IntelliJ IDEAIDEA快捷键&#xff1a;重要设置&#xff1a;linux远程连接&#xff1a;SSH连接&#xff1a;浏览远程主机&#xff1a; VS codevs code快捷键&#xff1a;vs code插键vue3 必安插件注意 IntelliJ IDEA 感觉百度百科就给了这个软件很好的定义&#xff0c…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

公众号推荐流量玩法的3个秘密

从微信生态的流量触点来看&#xff0c;公众号链接着私聊、朋友圈、微信群、小程序、视频号、搜一搜、看一看等一切与目标用户能接触到的中转站 流量的尽头是私域。而对于大部分普通人来说&#xff0c;公众号可以作为私域的第一站。且相比个人微信号&#xff0c;其有着深度价值…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

MySQL中如何快速定位占用CPU过高的SQL

作为DBA工作中都会遇到过数据库服务器CPU飙升的场景&#xff0c;我们该如何快速定位问题&#xff1f;又该如何快速找到具体是哪个SQL引发的CPU异常呢&#xff1f;下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼&#xff0c;但处理问题的思…

三级安全教育二维码怎么生成

三级安全教育是工人进场上岗前必备的过程&#xff0c;也是施工项目中非常重要的一项工作&#xff0c;我们要合理规范地进行安全教育培训工作&#xff0c;提升真实性和可靠性&#xff0c;保障工人的安全到位。 1、将三级安全教育制作成二维码,放在施工现场等位置,工人可以随时随…

【Linux系统基础】(6)在Linux上大数据NoSQL数据库HBase集群部署、分布式内存计算Spark环境及Flink环境部署详细教程

大数据NoSQL数据库HBase集群部署 简介 HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。 和Redis一样&#xff0c;HBase是一款KeyValue型存储的数据库。 不过和Redis设计方向不同 Redis设计为少量数据&#xff0c;超快检索HBase设计为海量数据&#xff0c;…

二叉树中的深搜

目录 &#x1f449;&#x1f3fb;计算布尔二叉树的值&#x1f449;&#x1f3fb;求根节点到叶节点数字之和 &#x1f449;&#x1f3fb;计算布尔二叉树的值 原题链接&#xff1a;计算布尔二叉树的值 mycode: class Solution { public:bool evaluateTree(TreeNode* root) {if…