C++-命名空间

news2024/10/5 14:05:12
C++ 命名空间是一种用于组织代码的机制,可以帮助避免命名冲突,提高代码的可读性和可维护性。命名空间将代码分组到逻辑单元中,允许在不同的代码单元中使用相同的名称而不会产生冲突。
命名空间通过将代码放置在一个命名空间内部来实现。在 C++ 中,命名空间由关键字 namespace 开始,后面跟着命名空间的名称以及一对大括号,大括号中包含了命名空间内部的代码。
命名空间的使用

首先,在C++项目中进行头文件创建(.h文件)。

接着在头文件中使用namesapce关键字进行命名空间声明,声明格式如下:

#pragma once
#include<iostream>
​
namespace wve1 {
    int print();
}
namespace wve2 {
    int print();
}

此时声明了两个命名空间wve1和wve2;且两个命名空间中都含有print()函数,此时我们可以以直接在头文件中定义命名空间中的函数;因为会用到cout输出流,所以我们在头文件中包含iostream头文件。

右击函数名-->选择快速操作和重构-->创建声明/定义

这个时候函数的具体定义会被写入与头文件相同名称的.cpp文件中。

调用wve1中的print()输出“wve1:”;

int wve1::print()
{
    std::cout << "wve1:" << std::endl;
    return 0;
}

调用wve1中的print()输出“wve2:”;

int wve1::print()
{
    std::cout << "wve2:" << std::endl;
    return 0;
}

至此定义函数的文件内容为:

#include "NameTest.h"
​
​
int wve1::print()
{
    std::cout << "wve1:" << std::endl;
    return 0;
}
​
int wve2::print()
{
    std::cout << "wve2" << std::endl;
    return 0;
}

在命名空间声明完成,且函数定义完成之后,这个时候如果需要在程序中调用该命名空间中的函数则需要先在程序中包含带有命名空间声明的头文件,如果我们要调用wve1命名空间中的函数,按照以下方式进行调用。

#include "NameTest.h"
​
int main() {
    
    wve1::print();
    system("pause");
    return 0;
}

:: 是作用域解析操作符(Scope Resolution Operator)

在命名空间中,:: 可以用来限定访问命名空间内的成员。

如果不想每次在调用函数的时候都指定命名空间,那么可以使用using namespace 命名空间; 指定使用的命名空间。

#include "NameTest.h"
​
using namespace wve1;
​
int main() {
    
    print();
    system("pause");
    return 0;
}

在这个情况下如果想要调用wve2命名空间中的函数则还是需要使用:: 进行调用。

#include "NameTest.h"
​
using namespace wve1;
​
int main() {
    
    print();
​
    wve2::print();
    system("pause");
    return 0;
}

如果使用using namespace同时指定了wve1,wve2命名空间,那么因为此时两个空间中都有print函数,所以程序会报错。所以使用using namespace在一些开发人员看来也是比较危险的使用。

并且在命名空间中还是可以继续进行命名空间的声明;如这个时候如果想在wve2中继续声明一个命名空间wve3,且wve3中也有一个print()函数,则头文件中(.h)可以这样写:

namespace wve2 {
    int print();
    namespace wve3 {
        int print();
    }
}

函数的定义:

int wve2::wve3::print()
{
    std::cout << "wve3" << std::endl;
    return 0;
}

这个时候在程序中就可以使用wve2::wve3::print()进行wve3命名空间中的函数调用;

#include "NameTest.h"
​
int main() {
​
    wve2::wve3::print();
    system("pause");
    return 0;
}

再回到Hello World;

std::cout<<"Hello World!"<<std::endl;

cout、endl其实就是std这个标准命名空间中的元素,且使用::进行调用。

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

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

相关文章

重构国内游戏账号登录系统的思考和实践

本期作者 背景 账号登录系统&#xff0c;作为游戏发行平台最重要的应用之一&#xff0c;在当前的发行平台的应用架构中&#xff0c;主要承载的是用户的账号注册、登录、实名、防沉迷、隐私合规、风控等职责。合规作为企业经营的生命线&#xff0c;同时&#xff0c;账号登录作为…

解决跨域和https不能访问的问题。

本地安装了项目,是一键安装的,安装之后还是apache的web服务器,有个视频服务用的是https的服务,要对这个项目进行二次开发,本地调用没问题,可是别人已调用就跨域。只能本地访问。 现在有两个问题:1.解决跨域问题 2.还要解决https访问的问题。 解决思路,用nginx 的ssl证…

语雀如何显示 Markdown 语法

正常的文章链接 https://www.yuque.com/TesterRoad/t554s28/eds3pfeffefw12x94wu8rwer8o 访问后是文章&#xff0c;无法复制 markdown 的内容 在链接后增加参数 /markdown?plaintrue&linebreakfalse&anchorfalse 直接显示代码

力扣经典150题第三十题:长度最小的子数组

目录 力扣经典150题解析之三十&#xff1a;长度最小的子数组1. 介绍2. 问题描述3. 示例4. 解题思路方法一&#xff1a;滑动窗口 5. 算法实现6. 复杂度分析7. 测试与验证测试用例设计测试结果分析 8. 进阶9. 总结10. 参考文献感谢阅读 力扣经典150题解析之三十&#xff1a;长度最…

2024面试软件测试,常见的面试题(上)

一、综合素质 1、自我介绍 面试官您好&#xff0c;我叫XXX&#xff0c;一直从事车载软件测试&#xff0c;负责最多的是中控方面。 以下是我的一些优势&#xff1a; 车载的测试流程我是熟练掌握的&#xff0c;且能够独立编写测试用例。 平时BUG提交会使用到Jira&#xff0c;类似…

计算机组成原理【CO】Ch5 中央处理器

目录 大纲 一条指令的执行 取指令 执行指令 数据传送类&#xff08;mov、load、store&#xff09; 运算类指令&#xff08;加、减、乘、除、移位、与、或&#xff09; 转移类指令&#xff08;jmp、jxxx&#xff09; 如何看懂注释 袁版注释⻛格&#xff08;16年以后的真题&…

草稿 | word格式的网址索引

参考文献引用 参考文献上标设置&#xff1a;&#xff08;改为上标的快捷键为ctrlshift“”&#xff09; https://jingyan.baidu.com/article/cbcede07d786c743f50b4d47.html 多个参考文献一起引用&#xff1a; https://blog.csdn.net/neptune4751/article/details/119921187 交…

记录一下因为没等配置文件上传完就跑lg.sh导致f2.sh没起作用的原因

【背景说明】 我正在学习sgg的数仓采集项目&#xff0c;采集内容分为用户行为日志采集和MySQL的业务数据采集。 用户行为日志采集分为2个阶段&#xff1a; 阶段1&#xff1a;将日志文件的数据通过flume采集到kafka。我的这一步正常&#xff0c;kafka上有数据&#xff0c;即f…

Springboot配置文件(application.yml)的加载顺序

spring boot 启动会扫描一下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 file…/config/ file…/ classpath:/config classpath:/ 以上是按照优先级从高到低的顺序&#xff0c;所有位置的文件都会被加载&#xff0c;高优先级配置内容会…

Linux内核与基础命令学习总结

Linux操作系统 Linux操作系统博大精深&#xff0c;其中对线程&#xff0c;IO&#xff0c;文件系统等概念的实现都很有借鉴意义。 ​ 文件系统和VFS 文件系统的inode上面讲过了。VFS主要用于屏蔽底层的不同文件系统&#xff0c;比如接入网络中的nfs文件系统&#xff0c;亦或是w…

Pytest精通指南(20)日志收集器配置

文章目录 前言配置日志收集验证日志收集拓展-收集断言错误信息拓展-动态生成日志文件拓展-自定义封装日志收集类 前言 在pytest框架中&#xff0c;日志记录&#xff08;logging&#xff09;是一个强大的功能&#xff0c;它允许我们在测试期间记录信息、警告、错误等&#xff0c…

MongoDB扩大与谷歌云的合作,助推各行业客户部署和扩展新型应用

亮点前瞻 ● MongoDB Atlas Search Nodes现已在谷歌云&#xff08;Google Cloud&#xff09;上全面推出&#xff0c;让客户能够更轻松、更经济高效地隔离和扩展生成式AI工作负载 ●适用于MongoDB Atlas的Google Cloud Vertex AI扩展以及BigQuery与Spark的全新集成&#xff0c…

计算机软考流程介绍

笔者来介绍一下软考流程 1、考试简介 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff1a;简称 计算机软考 认证&#xff1a; 国家人力资源和社会保障部 国家工业和信息化部 目的&#xff1a; 科学、公正地对全国计算机与软件专业技术人员进行职业资格…

PolarDB MySQL 版 Serverless评测|一文带你体验什么是极致弹性|后续

PolarDB MySQL 版 Serverless评测|一文带你体验什么是极致弹性|后续 弹性压测三后续自动缩容全局一致性测试测评体验 在上一篇PolarDB MySQL 版 Serverless测评博文中&#xff1a;https://developer.aliyun.com/article/1385834 关于弹性压测三通过增加只读节点压测来观测到Ser…

流程图的新语法-mermaid的快速使用--推荐

chatgpt或者现在的大数据采用的流程图给出的代码如下&#xff1a; graph TD;A[接收客户请求] --> B[问题分类];B --> C[技术支持];B --> D[维修服务];C --> E[远程解决];C --> F[现场支持];D --> G[维修完成];G --> H[服务反馈];style A fill:#f9f,strok…

为什么学习C++之前学习C语言?

源地址&#xff1a;https://www.ctvol.com/c-cdevelopment/4074.html C 读作“C加加”&#xff0c;是“C Plus Plus”的简称。顾名思义&#xff0c;C 是在C语言的基础上增加新特性&#xff0c;玩出了新规则&#xff0c;所以叫“C Plus Plus”,还有C#&#xff0c;当然C#一般是针…

刻度清晰耐酸碱腐蚀PFA材质实验室用塑料量具特氟龙量筒量杯

PFA量筒为上下等粗的直筒状&#xff0c;特氟龙量杯是上大下小的圆台形&#xff0c;底座均有宽台设计&#xff0c;保证稳定性&#xff0c;两者均可在实验室中作为定量量取液体的量具&#xff0c;上沿一侧有弧嘴设计&#xff0c;便于流畅地倾倒液体。 规格参考&#xff1a;5ml、…

机器人路径规划:基于Q-learning算法的移动机器人路径规划,可以自定义地图,修改起始点,提供MATLAB代码

一、Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

(十八)C++自制植物大战僵尸游戏的游戏暂停实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 游戏暂停 当玩家遇到突发事件&#xff0c;可以通过暂停功能暂停游戏&#xff0c;以便及时处理问题。在激烈的游戏中&#xff0c;玩家可能需要暂停游戏来进行策略调整。此外&#xff0c;长时间的游戏对战可能会让玩…