C++,命名空间

2023-11-17

命名空间定义

namespace 命名空间名
{
    变量名;
    函数;
    结构体;
    枚举名;
}

全局引入命名空间

using namespace 命名空间名;

部分引入命名空间

using namespace 命名空间名::变量名

注意:::表示域限定符,在哪个位置使用,在哪写域限定符

命名空间冲突问题 

局部变量和命名空间冲突

        当局部变量和命名空间冲突时,即使引入命名空间,但在使用时因为就近原则,所以默认使用局部变量,如果想要使用命名空间中的变量,则需要使用域限定符。

#include <iostream>
using namespace std;

namespace zpp {
    int age;
    char name[20] = "zhangsan";
    int cout;
}
using namespace zpp;

int main()
{
    //定义局变量
    char name[20] = "hello";
    std::cout<<"name = "<<name<<endl;      //hello
    std::cout<<"name = "<<zpp::name<<endl; //zhangsan

    return 0;
}
多个命名空间中命名冲突问题

         当遇到多个命名空间冲突问题,通常有两种解决方法:1)只引入某一个命名空间,引入需要使用的命名空间的标识符。2)在使用变量时,使用域限定符。

#include <iostream>
using namespace std;

namespace zpp {
    int age;
    char name[20] = "zhangsan";
    int cout;
}
using namespace zpp;
int main()
{
    std::cout << "Hello World!" << endl;

    //当多个命名空间名产生冲突时,可以使用命名空间名和作用域限定符解决
    std::cout<<zpp::cout<<endl;        //0

    return 0;
}
全局变量和命名空间冲入问题

        当全局变量和命名空间冲突, 通常有两种解决方法:1)只引入某一个命名空间,引入需要使用的命名空间的标识符。2)在使用变量时,使用域限定符,全局变量默认和匿名空间存在一起。

#include <iostream>
using namespace std;

namespace zpp {
    int age;
    char name[20] = "zhangsan";
    int cout;
}
using namespace zpp;


//定义全局变量
int age = 30;

int main()
{
    std::cout << "Hello World!" << endl;

    //当命名空间中的名字和全局变量冲突时,也要用命名空间名和作用域限定符区分
    zpp::age = 18;
    //使用全局变量的方式,系统会将全局变量放到一个命名空间中,该命名空间为匿名空间
    //匿名空间中的名字使用方式: ::名字
    std::cout<<"zpp::age = "<<zpp::age << "   全局age = "<<::age<<endl;

    return 0;
}

命名空间添加

        如果定义多个相同的命名空间名,最后会合并成一个命名空间。

namespace A 
{
    int num;
    int a;
}
namespace A
{
    int b;
}

命名空间的嵌套 

        如果在一个命名空间A内嵌套另一个命名空间B,在引入命名空间B时,需要逐级引入。

#include <iostream>
using namespace std;

namespace A
{
    int a = 0;
    namespace B
    {
        int a = 100;
        char c = 'a';
    }
}

using namespace A;
using namespace A::B;
int main()
{
    cout << A::a << endl; //a = 0;
    cout << A::B::a << endl; //a = 100;    
    return 0;
}

给命名空间重命名

namespace A
{
    int a = 0;
}
namespace NEW = A;

总结

  1. 定义命名空间,关键字为namespace,声明命名空间使用关键字using
  2. 命名冲突问题,多个命名空间冲突、命名空间与全局变量冲突、命名空间与局部变量冲突,解决方法:加上命名空间名和作用域限定符
  3. 命名空间可以嵌套定义,需要使用作用域限定符一级一级找到最低一级进行使用
  4. 一个程序可以定义多个同名的命名空间,但是要求命名空间中的名字不能相同

练习

        定义一个学生的结构体,包含学生的姓名,年龄,成绩,性别,学生的成绩,姓名,定义为私有权限;定义一个学生类型的结构体变量,设置公有函数用于给学生的成绩和名字进行赋值,(结构体中的函数:结构体中声明,结构体外定义)

#include <iostream>

using namespace std;
struct stu
{
    int age;
    float score;
    string sex;
    void func();
    void set_name(string &str,float &s)
    {
        name = str;
        score = s;
    }
private:
    string name;
};

void stu::func()
{
    cout << name << endl;
    cout << age << endl;
    cout << sex << endl;
    cout << score << endl;
}
int main()
{
    stu students;
    string str = "zhangsan";
    students.age = 18;
    students.sex = "男";
    float s = 95;
    students.set_name(str,s);
    students.func();
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++,命名空间 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 按成员序列化

    我已经实现了template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 域名解析的过程

    互联网的域名解析不是靠一个DNS服务器完成的 而是分到多个DNS服务器上的 那么怎么分 net com edu 根 分别对应自己的服务器 根这个服务器虽然不负责具体的层级域名的解析 但是他知道 net com edu等是由哪些服务器解析的
  • 使用Visual Studio Team Explorer管理项目源代码

    最近参与了WPMind站长张欣发起的一个WP7开源项目 其中用到了Visual Studio Team Explorer进行源代码管理 以下是使用Visual Studio Team Explorer管理Codeplex上源代码的一些说明
  • 使用nginx部署项目

    开发工具 VScode 项目上线 部署项目 1 确保自己的代码是最新的 1 提交代码 git add git commit m 备注 git push git merge 分支名 git pull 2 确认是最新代码 2 VScode 1
  • python中遇见module ‘random‘ has no attribute ‘seed‘原因

    是因为我设置 py文件名为random与这个模块好像冲突 具体啥原因我也解释不清楚 修改文件名就可以了 import random random seed 10 print random random print random random
  • React生命周期

    React生命周期 4个阶段 1 挂载卸载过程 初始化 2 更新过程 3 销毁阶段 4 错误处理阶段 挂载卸载过程 构建并插入真实DOM 1 1 constructor 1 2 componentWillMount 1 3 render 1
  • 悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

    为推动大模型在产业落地和技术创新 智源研究院发布 开源商用许可语言大模型系列 开放评测平台 2 大重磅成果 打造 大模型进化流水线 持续迭代 持续开源开放 01 悟道 天鹰 Aquila 开源商用许可语言大模型系列 悟道 天鹰 Aquila
  • 如祺出行冲刺自动驾驶商业化,人少的地方机会多?

    网约车 正在迎来让人 不明觉厉 的新一轮竞赛 网约车监管信息交互系统的数据显示 截至今年6月30日 全国共有318家网约车平台公司取得网约车平台经营许可 环比增加5家 网约车监管信息交互系统6月份共收到订单信息7 63亿单 环比上升3 7
  • 华为三层交换机 配置

    1 拓扑图 2 汇聚层交换机设置
  • 第十四篇 Inception V3——论文翻译

    文章目录 摘要 1 引言 2 通用设计原则 3 基于大滤波器尺寸分解卷积 3 1 分解到更小的卷积 3 2 空间分解为不对称卷积 4 利用辅助分类器 5 有效的网格尺寸减少 6 Inception v2 7 通过标签平滑进行模型正则化 8
  • 【PAT乙级】旧键盘打字

    题目描述 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大
  • C# System.UnauthorizedAccessException:“对路径“C:\xxx”的访问被拒绝。

    C 程序运行时提示 对路径 C xxx 的访问被拒绝 System UnauthorizedAccessException 对路径 C Excel2007 xlsx 的访问被拒绝 解决办法是 启动visual studio时选择右键 gt
  • System.in.read()问题

    来源 http zhidao baidu com question 74164319 Q System in read 中in是一个字段即静态常量 JAVA帮助文档中 public static final InputStream in 那
  • MAC地址介绍及相关操作

    一 MAC地址介绍 MAC地址简介 MAC Mediun access cntrol 地址 用来表示互联网每一个站点的标识符 采用十六进制数表示 共六个字节 其中 前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码 也称为 编
  • ArcGIS 10.8打开后显示loading document后闪退

    安装ArcGis完成后 打开ArcMap 卡在Loading Document后 闪退的问题 为何为肖的博客 CSDN博客 arcmap加载文档后闪退b同事新装ArcGis10 5后出现这个情况 联想以前编译Qgis时python环境变量的
  • 由一个例子,介绍linux目录的多用户及其读写可执行权限

    例子 查看文件的读写权限以及所属用户 查看目录的读写权限以及所属用户 目录读写权限默认为755即rwxr xr x 文件读写权限默认为744即rwxrr 目录和子目录的读写权限特点 例子 ls ld home1 drwxrwxrwx 39
  • 模板小程序是什么?怎么选择?

    模板小程序是指第三方服务商基于某个模板开发的小程序 这个模板可以根据开发者的需求进行定制 包括页面设计 功能模块 数据管理等方面 开发者可以在模板基础上进行自主开发 实现自己的需求和功能 模板小程序的优点是开发周期短 价格相对较低 一般是直
  • 白夜追凶 :手 Q 图片的显示和发送逻辑

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 陈舜尧 导语 这张图片在快捷发图栏背景是黑色的 为啥发到AIO 会话窗口 里背景就变成白的了 通过一个bug单 对黑白背景问题跟进的过程中发现了手q中很多奇怪的表现 一层层看代码
  • SpringBoot支付宝接入实战

    文章目录 支付宝支付后端实战 基于SpringBoot 一 支付宝支付介绍及接入指引 1 支付宝开放能力介绍 1 能力地图 2 电脑网站支付产品 2 接入准备 1 开放平台帐号注册 2 常规接入流程 3 使用沙箱 二 项目的环境准备 1 框
  • js小案例

    一次性定时器 div class dn div
  • C++,命名空间

    命名空间定义 namespace 命名空间名 变量名 函数 结构体 枚举名 全局引入命名空间 using namespace 命名空间名 部分引入命名空间 using namespace 命名空间名 变量名 注意 表示域限定符 在哪个位置使