C++:命名空间

news2024/9/25 15:24:22

    从今天正式开始对C++的学习,这里只学习C++对C的拓展,和C相同的部分在C语言专栏中都可以找到,我们先看一段C++代码

#include<iostream>
using namespace std;
int main()
{
   cout<<"hello world<<endl;
   return 0;
}

     同样也是打印hello world,头文件还有main函数之前的using namespace std什么意思,cout又是什么意思,都需要我们进行了解

1.命名空间基础

     当一个项目很大时,它可能会包含大量重复的名字,C++可以对名字的产生和其所在作用域进行控制,在之前C语言的学习我们可以通过static关键字来使得名字只能在本编译单元内可见,在C++中我们可以通过命名空间来控制对名字的访问

     在C++中,名称可以是符号常量、变量、宏、函数、结构体、枚举等等

     std是C++标准命名空间,C++标准程序库中的所有标识符都被定义在std命名空间中,比如类iostream、vector等,使用时要加上using声明(using namespace std)或using指示(如std::cout)。

     可以定义不同的命名空间,这样即使名字相同也不会出现错误,类似这样:

      那我们如何定义命名空间呢,下面就是了

 2.命名空间的使用

2.1 命名空间的定义

namespace 名称
{

//定义变量、函数、类型等等

}

2.2 命名空间成员的访问

   (1)使用作用域操作符 ::

   (2)空间名::成员

#include<iostream>
using namespace std;

namespace nameA  //定义一个名字是nameA的空间
{
    int a;
    void func()
    {
      cout<<"nameA"<<endl;
    }
}

namespace nameB   //定义一个名字是nameB的空间
{
     int a;
     void func()
     {
      cout<<"nameB"<<endl;
     }
}

int main()
{
    //访问空间中的成员变量
    nameA::a=100;
    nameB::a=200;
    cout<<"A::a:"<<nameA::a<<endl;//cout就类似printf,用来输出内容,endl的作用就相当于\n
    cout<<"B::a:"<<nameB::a<<endl;
    
    //访问空间中的成员函数
    nameA::func();
    nameB::func();
    return 0;
}

        由此可见,在不同的命名空间中定义相同名字的变量或者函数都是没有问题的,两个空间相互独立,谁也不会影响谁,这就是C++的优势! 

2.3 命名空间的错误使用

      命名空间不能在某个函数内定义,比如这样:

void test()
{
    namespace A
   {
      int a=10;
   }
    namespace B
   {
      int a=10;
   }
   cout<<A::a<<endl;
   cout<<B::a<<endl;
}

     命名空间只能在全局范围内定义,否则你函数调用结束了,空间也没了,等于没定义,费这么大劲干嘛,只能在全局范围内定义!

2.4 命名空间的嵌套使用

namespace A
{

   int a=10;
   namespace B
   {
       int a=10;
   }
}
void test()
{
   cout<<A::a<<endl;
   cout<<A::B::a<<endl;
}

2.5 命名空间的别名

     如果命名空间的名字很长记不住怎么办,我们有办法,起个别名,代码如下:

namespace veryLongname
{
   int a=10;
   void func()
   {
     cout<<"hello world"<<endl;
   }

void test()
{
   namespace shortname=veryLongname;//起别名
   cout<<"veryLongname::a:"<<shortname::a<<endl;
   veryLongname::func();
   shortname::func();
}

     可以看到,两个名字的效果是一样的,神奇不神奇?

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

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

相关文章

【Proteus仿真】【51单片机】电子门铃设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;按键、无源蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示第一种门铃音调&#xff0c;可通过K1键切…

力扣第一题-两数之和[简单]

题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任…

陈年葡萄酒里面有什么奥秘?

自古希腊和古罗马以来&#xff0c;陈年葡萄酒就令美食家着迷。很自然&#xff0c;许多人会认为酒越陈越香。只有一个问题:这不是真的。世界上绝大多数的葡萄酒一旦你购买了它们就会在一两年之内被品尝掉。葡萄酒是一种活的食物&#xff0c;当你打开软木塞或拧开金属螺旋盖时&am…

2023年底总结丨5大好用的局域网监控软件

不知不觉间2023年又到结尾了&#xff0c;今年我们服务过很多想要电脑监控软件的客服&#xff0c;也服务了很多想要加密软件的客户。 这一年&#xff0c;我们走得不疾不徐&#xff0c;走得稳而坚定&#xff1b;这一年&#xff0c;我们累积服务超过万计客户&#xff1b;这一年&a…

什么是质量工程?

质量工程是在精益、敏捷、DevOps等实践基础上进一步发展出的系统化赋能软件开发流程、构建既快又好的开发框架的实践。原文: What is Quality Engineering 我们基于古法语"definer"的定义&#xff0c;通过澄清边界、要素和相互作用的方式来构建某个概念&#xff0c;本…

二维差分详解

前言 上一期我们分享了一维差分的使用方法&#xff0c;这一期我们将接着上期的内容带大家了解二位差分的使用方法&#xff0c;话不多说&#xff0c;LET’S GO!&#xff08;上一期链接&#xff09; 二维差分 二维差分我们可以用于对矩阵区间进行多次操作的题。 二维差分我们还…

关于“Python”的核心知识点整理大全23

目录 ​编辑 第&#xff11;0 章 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 pi_digits.txt file_reader.py 10.1.2 文件路径 10.1.3 逐行读取 file_reader.py 10.1.4 创建一个包含文件各行内容的列表 10.1.5 使用文件的内容 pi_string.py 往期快速传…

【从零开始学习--设计模式--装饰者模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍装…

关于“Python”的核心知识点整理大全14

目录 ​编辑 7.2.2 让用户选择何时退出 parrot.py 7.2.3 使用标志 7.2.4 使用 break 退出循环 cities.py 7.2.5 在循环中使用 continue counting.py 7.2.6 避免无限循环 counting.py 7.3 使用 while 循环来处理列表和字典 7.3.1 在列表之间移动元素 confirmed_user…

虚拟网络管理解决方案

随着业务规模的扩大&#xff0c;其网络的规模和复杂性也成比例地扩大&#xff0c;企业级组织和中小型企业需要大规模网络来满足不断增长的业务需求&#xff0c;然而&#xff0c;大规模网络需要大量的物理组件、定期维护和配置&#xff0c;所有这些都是有代价的&#xff0c;因此…

无mac在线申请hbuilderx打包ios证书的方法

hbuilderx是一个跨平台的开发工具&#xff0c;可以开发android和ios的app应用。打包hbuilderx应用需要hbuilderx打包证书。但是很多使用hbuilderx开发的程序员&#xff0c;并没有mac电脑&#xff0c;而申请ios的证书&#xff0c;hbuilderx官网的教程却是需要mac电脑的&#xff…

竞赛保研 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

C++面向对象编程(OOP)-浅拷贝与深拷贝

本文主要使用详细的代码比较说明深拷贝和浅拷贝的区别&#xff0c;延伸讲到构造函数。并提供深拷贝和浅拷贝的对比代码。 目录 1 深拷贝和浅拷贝引入原因 2 深拷贝个浅拷贝基本介绍 3 浅拷贝的弊端 4 拷贝构造函数 5 类中有指针的浅拷贝 6 类中有指针的深拷贝 1 深拷贝和浅…

Zabbix监控系统部署与管理

zabbix介绍 zabbix是⼀个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的免费开源解决⽅案。zabbix能监视各种⽹络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix构成 zabbix由…

从纸笔到屏幕:我的CS笔记记录体验分享

前言 三年大学生活里&#xff0c;我花了很多时间在记录笔记上&#xff0c;也因为现有种类繁多的各种学习方式&#xff0c;和朋友一起走了很多弯路。纸笔&#xff0c;OneNote&#xff0c;Typora…… 想总结分享一下自己大学期间的学习笔记记录方式&#xff08;主要针对计算机学…

后端项目全局异常处理-使用RuntimeException自定义异常异常分类简单举例

接上篇&#xff1a;后端项目操作数据库-中枢组件Service调用Mapper 自定义异常&#xff1a; 手动抛出异常&#xff0c;为了后续统一捕获&#xff0c;需要异常自定义&#xff1b; 如&#xff1a;当使用抛出异常的方式表示“操作失败”时&#xff0c;为了后续统一捕获&#xff0c…

苹果计划将全球1/4的IPhone产能转移至印度

KlipC报道&#xff1a;据相关人士报道&#xff0c;苹果希望在未来2到3年内每年在印度生产超过5000万部iphone&#xff0c;要是该计划得以实现&#xff0c;印度将占领全球iPhone产量的四分之一。 KlipC的分析师Alex Su表示&#xff1a;“此次iPhone15推出是苹果印度制造计划的一…

YOLOv8重要模块解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 yolov8的模块代码主要在./ultralytics/nn/modules/下 conv.py 在conv.py文件的头部&#xff0c;__all__中声明了当前模块的所有暴露的模…

LeetCode刷题日志-73矩阵置零

思路一&#xff1a; 用一个同样大小的矩阵记录0的位置&#xff0c;然后遍历矩阵置0&#xff0c; 空间复杂度为O&#xff08;mn&#xff09; class Solution {public void setZeroes(int[][] matrix) {int [][] matrix_new new int[matrix.length][matrix[0].length];for(int …

太阳光模拟器助力植物生长研究领域的分析研究

概述 太阳光模拟器是一种精密的光学设备&#xff0c;能够模拟太阳光的波长、强度和分布&#xff0c;为植物生长提供所需的光照环境。在植物生长研究中&#xff0c;太阳光模拟器被广泛应用于探讨植物生长、发育和产量等方面的问题&#xff0c;为农业生产、园艺研究和植物科学提供…