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     
	{
		//代码
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VTK+QT配置(VS)

先根据vtk配置这个博客配置基本环境 然后把这个dll文件从VTK的designer目录复制到qt的对应目录里 记得这里是debug版本&#xff0c;你也可以配置release都一样的步骤&#xff0c;然后建立一个qt项目&#xff0c;接着配置包含目录&#xff0c;库目录&#xff0c;链接输入&…

Spring之国际化:i18n

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

第 377 场周赛虚拟参赛记录及补题

最小数字游戏 3 题目 - 思路 模拟代码 class Solution { public:vector<int> numberGame(vector<int>& nums) {sort(nums.begin(),nums.end());vector<int> ans;for (int i 0;i < nums.size();i ) if (i&1)ans.push_back(nums[i-1]);else ans.…

优维产品最佳实践第20期:控制台全链路监控

之前我们会觉得cmdb自动发现没有上报很难排查&#xff0c;弄不清楚数据的上报链路&#xff1b;监控指标的数据断点很难定位&#xff0c;flink对现场来说是一个黑盒子&#xff1b;apm数据更新不及时到底是上报异常还是入库失败呢&#xff1f; 现在控制台集成了对数据链路的监控…

大模型做实体识别任务的原理

1、背景 命名实体识别&#xff08;named entity recognition&#xff0c;NER&#xff09;&#xff1a;通常是一个序列标注的任务&#xff0c;常见的模型框架有&#xff1a;LSTM-CRF、BERTBILSTMCRF等&#xff0c;该种任务通常被成为flat NER即&#xff1a;每一个token只分配一…

浮点数的转换--IEEE 754

IEEE754标准是一种浮点数表示标准&#xff0c;一般分为 单精度&#xff08;32位的二进制数&#xff09;&#xff1b;双精度&#xff08;64位的二进制数&#xff09; 根据国际标准IEEE754&#xff0c;任意一个二进制浮点数V可以表示为下面形式&#xff1a; V (-1)^s *&#…

Linux---命令行参数+环境变量

一、命令行参数 int main(int argc,char*argv[]) {//...return 0; } 不知道有没有人见过这样的主函数&#xff0c;它带了两个参数&#xff0c;argv接收的参数就叫做命令行参数&#xff0c;因为它的参数是从命令行来的&#xff0c;给大家演示一下&#xff0c;大家就懂了 命令行…

干货//可以翻页的电子画册制作方法

想象一下&#xff0c;你是一位新晋的时尚品牌设计师&#xff0c;想要向全球展示你的设计理念和产品。传统的纸质画册虽然精美&#xff0c;但无法满足现代人对便捷性和互动性的需求。那么&#xff0c;如何解决这个问题呢&#xff1f; 现在&#xff0c;你可以使用翻页电子画册的制…

正则表达式:元字符

一、什么事元字符 正则是由一系列的元字符组成的&#xff0c;所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符&#xff0c;元字符是构成正则表达式的基本元件。 二、元字符的分类 1.特殊单字符 效果&#xff1a; ①.任意字符&#xff08;换行符除外&#xff09;&…

51单片机相关寄存器

前言 单片机复习的时候对应寄存器的记忆感觉很混乱&#xff0c;这里进行一下整理,后面的单词是我用来辅助记忆的&#xff0c;可能并不是表示原本的含义。 P3口的第二功能 0RXD 串行数据输入口 1TXD串行数据输出口2INT0外部中断0输入3INT1外部中断1输入4T0定时器0外部计数输入…

spring之资源操作:Resources

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

等级保护的基本要求(一)

目录 等级保护的标准定位 其他标准的关系 标准适用范围 标准编写思路 描述模型 基于安全保护能力 能力目标 第一级安全保护能力 第二级安全保护能力 第三级安全保护能力 第四级安全保护能力 描述模型-管理要求特点 描述模型-覆盖范围特点 等级保护的标准…

【汇编先导】-- 2

汇编先导 6. 寄存器 存储数据&#xff1a;CPU > 内存 > 硬盘(固态、机械) CPU还可分为&#xff1a; 32位CPU 8 16 32 64位CPU 8 16 32 64(增加了寻址能力) 通用寄存器 # 32位的通用寄存器只有8个 # 可以在任意软件的底层看到 # 通用寄存器可以存储任何值存值的范围…

ES6-11

一、ES6 js的异步和同步&#xff0c;js是单线程语言&#xff1a; 同步&#xff1a;加入主线程&#xff0c;按顺序执行&#xff0c;即上一个同步任务结束后&#xff0c;本任务跟着执行。 异步&#xff1a;加入任务队列&#xff0c;等待主线程上任务都执行完毕&#xff0c;请求主…

Ubuntu 常用命令之 date 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 date命令在Ubuntu系统中用于显示或设置系统的日期和时间。 date常见的参数 -d, --dateSTRING&#xff1a;显示STRING指定的时间&#xff0c;而不是当前时间。-u, --utc, --universal&#xff1a;显示或设置协调世界时间。-R, --…

《C++避坑神器·二十五》简单搞懂json文件的读写之遍历json文件读写

json.hpp库放在文章末尾 1、遍历json文件读写 &#xff08;1&#xff09;插入新键值对到json之情形1 原来json文件如下所示&#xff1a; {"Connection": {"IpAddress": "192.168.20.1","Rock": 0,"Solt": 1}, "Data…

【Java注解的作用是什么?】

&#x1f341;Java注解的作用是什么&#xff1f; &#x1f341;典型解析&#x1f341;扩展知识仓&#x1f341;什么是元注解&#x1f341;Retention&#x1f341;Target&#x1f341;Documented&#x1f341;Inherited &#x1f341;典型解析 Java 注解用于为 Java 代码提供元数…

W5500-EVB-Pico评估版介绍

文章目录 1 概述2 板载资源2.1 硬件规格2.2 硬件规格2.3 工作条件 3 参考资料3.2 原理图3.3 尺寸图 (单位 : mm)3.4 参考例程 4 硬件协议栈优势 1 概述 W5500-EVB-Pico是基于树莓派RP2040和完全硬连线TCP/IP控制器W5500的微控制器开发板-基本上与树莓派Pico板相同&#xff0c;但…

博客摘录「 Apollo安装和基本使用」2023年11月27日

常见配置中心对比 Spring Cloud Config: https://github.com/spring-cloud/spring-cloud-configApollo: https://github.com/ctripcorp/apolloNacos: https://github.com/alibaba/nacos 对比项目/配置中心 spring cloud config apollo nacos(重点) 开源时间 2014.9 2016…

逻辑运算加法器

前言 逻辑门本质上操作的是单个二进制数&#xff0c;通过高低电压或者有无信号来表示&#xff0c;并且&#xff0c;因为二进制数的原因&#xff0c;一个数字&#xff0c;我们可以通过二进制数来表示&#xff0c;整数可以精确表示&#xff0c;浮点数可以近似表示 本篇文章使用逻…