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

news2024/9/23 1:31:34

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.coloradmin.cn/o/1335638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公开100GB数据,日产汽车遭勒索组织“撕票”

Bleeping Computer 网站消息&#xff0c;Akira 勒索软件团伙声称成功入侵了日本汽车制造商日产汽车澳大利亚分公司的内部网络系统。 12 月 22 日&#xff0c;Akira 勒索软件团伙在其泄漏博客上添加了一个新的“受害者”&#xff0c;并表示其成员从日产汽车制造商的内部网络系统…

docker的一些思考

1.docker是啥&#xff1f; 2.镜像执行流程 3.一些疑惑和解答 1. 2.

软件测试面试--说一个印象最深的bug?

其实&#xff0c;面试官并不关心你描述的这个bug是否真的有价值&#xff0c;或有多曲折离奇&#xff1f;他只是&#xff1a; 1.了解你平时工作中的测试能力 所以&#xff0c;这就要求的你平时工作中遇到bug时试着自己去定位&#xff0c;定位bug的过程远比你的单纯的执行测试用…

【隐私保护】使用Python从文本中删除个人信息:第一部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

销售如何挖掘客户?有哪些方法?

在当今竞争激烈的市场环境中&#xff0c;客户资源的挖掘已经成为企业生存和发展的关键。销售人员需要掌握一定的技巧和方法&#xff0c;以有效地发掘潜在客户&#xff0c;提高销售业绩。以下分享一些挖掘客户的常用方法&#xff0c;帮助销售人员更好地开展业务。 一、了解客户需…

matlab附加功能管理器安装蓝牙工具箱

由于最近需要做蓝牙仿真方面的东西&#xff0c;需要用到matlab的蓝牙工具箱&#xff0c;根据官网例子输入&#xff1a; commSupportPackageCheck(BLUETOOTH);检测是否包含该工具箱&#xff0c;结果出现&#xff1a; 点击Add-On-Explorer出现&#xff1a; 网上搜索发现这是因为…

麦肯锡产品经理问题解决流程终极指南

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案&#xff1f;秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程&#xff0c;该流程专为希望提升水平的产品经理量身定制。 01. 麦…

周末两个比赛3个小题

周末安洵和nctf&#xff0c;因为不是学生也没报名拿附件作了一把。 安洵/pwn/side_channel , initiate 安洵的题很好&#xff0c;唯一的问题是把几乎所有的&#xff0c;有没有必要的都放了远程&#xff0c;而且服务器很差&#xff0c;好多题不是不会而是连不上。 这个题估计…

vivado 多周期路径与时钟相移

多周期路径与时钟相移 有时&#xff0c;必须在具有相同时钟域的两个时钟域之间定义定时约束时钟周期&#xff0c;但两个时钟之间的相移。在这些情况下&#xff0c;理解正时引擎使用的默认设置和保持关系。如果没有仔细调整两个时钟之间的相移可能导致两个时钟间的逻辑约束过大…

13.TCP/IP协议

1.TCP/IP协议是什么 TCP/IP协议不仅仅指的是TCP和IP两个协议&#xff0c;二十指由FTP、SMTP、TCP、UDP、IP等等协议构成的协议簇。 TCP/IP协议是一系列规则的统称&#xff0c;他们定义了消息在网络间进行传输的规则。是供已连接互联网的设备进行通信的通信规则 2.TCP/IP协议的…

走进数字金融峰会,为金融科技数字化赋能

12月20—21日&#xff0c;FSIDigital数字金融峰会在上海圆满召开。本次峰会包含InsurDigital数字保险峰会和B&SDigital数字银行与证券峰会2场平行峰会&#xff1b;吸引了近600位来自保险、银行、证券以及金融科技等行业的领导者和专家齐聚一堂&#xff0c;共同探讨金融业数…

宝塔面板Linux服务器CentOS 7数据库mysql5.6升级至5.7版本教程

近段时间很多会员问系统更新较慢&#xff0c;也打算上几个好的系统&#xff0c;但几个系统系统只支持MYSQL5.7版本&#xff0c;服务器一直使用较低的MYSQL5.6版本&#xff0c;为了测试几个最新的系统打算让5.6和5.7并存使用&#xff0c;参考了多个文档感觉这种并存问题会很多。…

STM32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件

资料下载: https://download.csdn.net/download/vvoennvv/88658447 一、概述 关于IAP的原理和Ymodem协议&#xff0c;本文不做任何论述&#xff0c;本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级&#xff0c;以及bootloader和主程序两个工程的配置…

UGUI Panel的显示和隐藏优化

unity UI如何开启&#xff08;显示&#xff09;或者关闭&#xff08;隐藏&#xff09;Panel界面&#xff0c;相信大家都是知道的&#xff0c;但是如何做最好呢&#xff1f; 可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的&#xff0c;简答快速地解决…

多播ip地址配置和通信理解

经常有朋友问&#xff0c;为什么相同局域网的ip需要相同网段&#xff0c;为什么组播的网段可以不同&#xff1f; 比如&#xff1a; 在您的局域网&#xff08;192.168.1.0/24 网段&#xff09;中设置多播组时&#xff0c;您可以选择一个在本地网络范围内尚未使用的多播组地址。…

【Java中序列化的原理是什么(解析)】

&#x1f341;序列化的原理是什么&#xff1f; &#x1f341;典型-----解析&#x1f341;拓展知识仓&#x1f341;Serializable 和 Externalizable 接门有何不同? &#x1f341;如果序列化后的文件或者原始类被篡改&#xff0c;还能被反序列化吗?&#x1f341;serialVersionU…

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路&#xff0c;在输入电压大于3.5v&#xff0c;小于0.8v时&#xff0c;蜂鸣器报警&#xff0c;输入电压在0.8v到3.5v之间时&#xff0c;不报警。 整体电路如下&#xff1a; 2.设计思路 在输入端&#xff0c;采取电阻分压的方式&#xff0c;输…

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来&#xff0c;大数据成为业界与学术界最火热的话题之一&#xff0c;数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢&#xff1f;一…

11-GraalVM元原生时代的Java虚拟机

文章目录 GraalVM诞生的背景Java在微服务/云原生时代的困境事实矛盾 问题根源Java离不开虚拟机 解决方案革命派保守派 GraalVM入门GraalVM特征GraalVM下载和安装GraalVM下载win10安装及配置linux安装及配置 GraalVM初体验(Linux)多语言开发(了解即可、官网有Demo)GraalCompiler…

无人叉车驻车定位RFID传感器CNS-RFID-01|1S的CAN总线通信连接方法

无人叉车驻车定位RFID传感器CNS-RFID-01|1S支持CAN总线通信方式&#xff0c;广泛应用于智能仓库&#xff0c;AGV |RGV小车&#xff0c;无人叉车&#xff0c;搬运机器人定位&#xff0c;驻车等领域&#xff0c;本篇幅主要介绍器CNS-RFID-01|1S RFID传感器的CAN总线通信连接方法。…