day02.C++命名空间

news2024/11/18 23:28:43

目录

一、命名空间的作用

二、命名空间的定义

三、命名空间的镶嵌定义

四、命名空间的使用方法


一、命名空间的作用

一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。例如:小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp 重复定错误。
为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。

使用【命名空间】解决名字冲突

#include<stdio.h>
#include<iostream>
using namespace std;
namespace Te{
class Student{
public:
    char *name;
    int age;
    double hight;
public:
    void speak(){
        cout<<name<<"的年龄和身高是"<<age<<"岁和"<<hight<<"米";
    }
};
}
int main(){
    Te::Student stu1;
    stu1.name="李小狼";
    stu1.age=9;
    stu1.hight=1.65;
    stu1.speak();
    return 0;
}

二、命名空间的定义

namespace Name
{
    int a;//命名空间可以包含变量
    double b=0.7;//变量可以初始化
    int sum(int x,int y,int z){//命名空间可以包含函数
    return x+y+z;
    }
    struct N{//命名空间包含类
     int name;
     double heigh;
    };
}

namespace是定义命名空间的关键字,Name是命名空间的名字。

如果在程序中要使用a和b,必须加上命名空间名和作用域分辨符::,如Name::a,这种用法称为命名空间限定。

命名空间的作用是建立一些互相分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。

  • 不允许在局部空间中(函数内)定义命名空间,命名空间具有全局属性
  • 在命名空间中只能进行定义操作,不能进行赋值加减调用函数等运算操作(初始化除外)。
  • 命名空间中可以定义变量、函数、类、typedef、#define等

 (1)命名空间不可以定义在局部空间:

三、命名空间的镶嵌定义

// 命名空间可以嵌套
namespace T1
{
	int m;
	int n;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace T2
	{
		int n;//同名变量,在T2命名空间中优先作用,T2的n
		int c = m;//父空间中定义的变量(非同名变量)可以在子空间中直接作用
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
	//int e = d;//编译出错,子空间中定义的变量不能在父空间中直接作用需要使用T2::d
	int e = T2::d;//需要引用对应的命名空间
}
  • 允许父子空间定义同名变量,变量在各自定义的空间中起作用。
  • 父空间中定义的变量(非同名变量)可以在子空间中直接作用,但子空间中定义的变量不能在父空间中直接作用。父空间使用子空间中定义的变量需要引用对应的子命名空间,(但可以不再带父空间名)。

四、命名空间的使用方法

使用using引用命名空间

1 、加命名空间名称及作用域限定符

int main()
{
    printf("%d\n", N::a);
    printf("%d\n", N::b);
    return 0;
}
  • 该方式只对当前变量的作用域有效
  •   域名限定符前为空表示忽略局部优先,指定全局域变量。

2、 使用using将命名空间中某个成员引入

using N::b;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    return 0;
}
  •   using N::b;可以写在源文件的任意位置,函数内外、前后都可以。但一般写在文件头。
  •    引入后的成员从引入位置开始向下具有全局作用域,可以跨函数使用。

3、 使用using namespace 将整个命名空间引入

using namespce N;
int main()
{
    printf("%d\n", a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;
}
  • using namespce N;可以写在源文件的任意位置,函数内外、前后都可以。但一般写在文件头。
  •         引入后的命名空间从引入位置开始向下具有全局作用域,可以跨函数使用。
  •         将整个命名空间引入会使得命名隔离失效,慎用!

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

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

相关文章

iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法

在iOS应用开发过程中&#xff0c;调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时&#xff0c;我们可以连接电脑并使用Xcode Console等工具来查看日志。然而&#xff0c;这种方式可能不够方便&#xff0c;并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了…

Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义

链表 空链表&#xff1a; 注意&#xff1a;函数不能返回局部变量的地址 操作&#xff1a; 1.创建空链表 2.头插 3.尾插 4.链表遍历 5.链表的长度 free&#xff1a;释放 删除&#xff1a; 头删 void popFront(struct Node *head) { //1.p指针变量指向首节点 //2.断…

康姿百德床垫价格合理功效好,用科技力量守护您的睡眠健康

现代生活中&#xff0c;优质睡眠的观念已深入人心。人们渐渐认识到&#xff0c;一个舒适的床垫不仅仅是睡眠的工具&#xff0c;更是健康的守护者。很多朋友在选购床垫一掷千金&#xff0c;却找不到一款合适的床垫。康姿百德床垫是专为提升睡眠质量研发的床垫&#xff0c;成为了…

网络安全全栈培训笔记(60-服务攻防-中间件安全CVE复现WeblogicJenkinsGlassFish)

第60天 服务攻防-中间件安全&CVE复现&Weblogic&Jenkins&GlassFish 知识点: 中间件及框架列表: lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,jQuery 1、中间件-Web…

Portainer访问远程Docker (TLS加密)

前言&#xff1a; docker的2375端口&#xff0c;出于安全性考虑即(Docker Remote API未授权访问漏洞)&#xff0c;是不开放的&#xff0c;如果想要管理远程docker&#xff0c;可以使用TLS机制来进行访问&#xff0c;这里以Portainer访问连接为例 文章参考&#xff1a;https://b…

外卖,也可以“聚合”

文章首发于微信公众号:PenguinPay &#xff0c;欢迎关注。 一、背景 1.1 订单来源 在过去&#xff0c;商家普遍使用传统POS收银软件进行线下店面收银&#xff0c;可以在一定程度上提升收银效率。 之后随着O2O外卖渠道的发展&#xff0c;越来越多的商家选择在线上平台运营门店…

吸猫毛空气净化器哪个好?推荐除猫毛效果好的宠物空气净化器品牌

如今&#xff0c;越来越多的家庭选择养宠物&#xff0c;使家庭变得更加温馨。然而&#xff0c;养宠物可能会带来异味和空气中的毛发增多&#xff0c;这可能会成为一大困扰&#xff0c;并对健康造成问题。 为了不让家里充斥着异味&#xff0c;特别是来自宠物便便的味道&#xf…

DATAX改造支持geometry类型数据同步

数据库使用postgresql安装了postgis插件存储了geometry空间数据&#xff0c;想使用datax做数据同步&#xff0c;但datax本身不支持geometry类型数据&#xff0c;如何改造呢&#xff1f; 1.首先下载已改造支持geometry类型的datax引擎&#xff0c;下载地址 https://download.c…

《区块链简易速速上手小册》第5章:智能合约(2024 最新版)

文章目录 5.1 智能合约的概念5.1.1 智能合约的基础知识5.1.2 主要案例&#xff1a;去中心化金融&#xff08;DeFi&#xff09;平台5.1.3 拓展案例 1&#xff1a;智能合约在供应链管理中的应用5.1.4 拓展案例 2&#xff1a;智能合约在房地产交易中的应用 5.2 智能合约的应用案例…

函数重载你真的了解吗?

1.什么叫函数重载&#xff1f; 函数重载&#xff08;Function Overloading&#xff09;是指在同一个作用域内&#xff0c;允许定义多个具有相同名称但参数列表不同的函数。具体而言&#xff0c;函数重载允许你定义同名的函数&#xff0c;但这些函数应该有不同的参数类型、参数个…

代码随想录算法训练营Day44|完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

目录 完全背包理论基础 完全背包问题 算法实现 518.零钱兑换II 前言 思路 377. 组合总和 Ⅳ 前言 思路 算法实现 总结 完全背包理论基础 题目链接 文章链接 完全背包问题 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是…

计网——应用层

应用层 应用层协议原理 网络应用的体系结构 客户-服务器&#xff08;C/S&#xff09;体系结构 对等体&#xff08;P2P&#xff09;体系结构 C/S和P2P体系结构的混合体 客户-服务器&#xff08;C/S&#xff09;体系结构 服务器 服务器是一台一直运行的主机&#xff0c;需…

springboot 整合 PowerJob实现定时任务调度

最近项目需要使用定时任务&#xff0c;而使用了PowerJob做任务调度模块&#xff0c;感觉这个框架真香&#xff0c;今天我们就来深入了解一下新一代的定时任务框架——PowerJob&#xff01; 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样…

关于破解IDEA后启动闪退的问题

问题描述&#xff1a;2023.1启动不了&#xff0c;双击桌面图标&#xff0c;没有响应。 解决办法&#xff1a; 打开C:\Users\c\AppData\Roaming\JetBrains\IntelliJIdea2023.1\idea64.exe.vmoptions 这个文件。 内容如下所示&#xff1a; 删除红框的数据以后&#xff0c;再登录…

ARM架构可视化ROS消息方案部署

ARM架构可视化ROS消息方案部署 三种方案, 1. webviz 2. foxglove 3. rosviz 注: web要用firefox, chromimum用不了, 可能是因为取消了时间同步机制的原因 先说三种方案的优劣, webviz 延迟比较高, 但是部署相对简单, foxglove 部署比较费劲, 但是效果不错, 延迟低, 本文会尽…

MySQL篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、MyIASM二、Memory三、数据库引擎有哪些前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、MyIASM MyIASM是 MySQL默…

Dash :一个超漂亮的 python Web库!

你好&#xff0c;Dash 是一个非常方便的 Python 库&#xff0c;它可以非常非常帮助你构建基于 Web 的应用程序&#xff0c;而且最棒的是你无需使用 JavaScript&#xff01; 不仅如此&#xff0c;Dash 还是一个专门用于创建分析 Web 应用程序的用户界面库。 如果你是一个使用 …

【Algorithms 4】算法(第4版)学习笔记 03 - 1.3 背包、队列和栈

文章目录 前言参考目录学习笔记0&#xff1a;预热1&#xff1a;栈1.1&#xff1a;栈的链表实现1.1.1 代码实现1.2&#xff1a;栈的数组实现1.2.1&#xff1a;定容栈1.2.2&#xff1a;可调整大小数组1.2.3&#xff1a;代码实现1.3&#xff1a;链表与数组的取舍2&#xff1a;队列…

Vue中的常用指令

一、常用指令 概念&#xff1a;指令&#xff08;Directives&#xff09;是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。 为啥要学&#xff1a;提高程序员操作 DOM 的效率。 vue 中的指令按照不同的用途可以分为如下 6 大类&#xff1a; 内容渲染指令&#xff08;v-html、v-t…

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件&#xff0c;旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度&#xff0c;自动或手动调整风扇的转速&#xff0c;以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…