【c++】的作用域 (局部域,类域,名字命名空间,文件域)

2023-05-16

这里写目录标题

  • 局部域
  • 类域
    • 类修饰指针
      • 由类限制修饰指向变量的指针
      • 由类修饰指向函数的指针
  • 命名空间
    • 背景:
  • 文件域

c++支持四个域:局部域,类域,名字空间域,文件域

局部域

函数域
在这里插入图片描述
这两个a就处于不同的局部域中
局部块域
在这里插入图片描述
这两个b也处于不同的局部域中。

变量定义在局部域中时只在该域中可见,而且当变量出了该作用域,就会自动析构。

当定义在局部域中的变量被static修饰后,它也只在该域中可见,
当静态变量被初始化且初始化的值不是0时,它存放在 .data段。
当静态变量未被初始化或者初始化的值为0时,那么它存放在 .bss段。
且在整个程序运行过程中都存活,但只在该局部域中可见。

static修饰的变量只初始化一次。
在这里插入图片描述

类域

在这里插入图片描述
类中的成员属性和成员方法有public,protected,private三种访问限定符

当成员属性和方法是public时
则可以通过 对象.来访问
而当成员属性和方法是
静态
时,
则可以通过类名:: 来调用。

而当成员和方法是protected,private,
只有在类中或者类的其它方法中才能使用该属于或者方法。
当成员属性和方法是静态时,
则可以通过 类名::来调用。

当成员和方法是private时,
子类无法访问该成员和方法。

类修饰指针

由类限制修饰指向变量的指针

class B
{
public:
    B(int x =0):value(x),sum(x+1){}
	static  void funb()
	{
		cout << "funb" << endl;
	}
	
public:
	int value;
	char ch[3];
	int sum;
};
int main()
{
	int a;
	B b(1),b2(2);
	int* pa = new int(10);
	int B::* bp = nullptr;//bp 只能指向B内中为int的成员变量
	bp = &B::value;
	bp = &B::sum;
	cout << b.*bp << endl;
	cout << b2.*bp << endl;

	return 0;
}

bp只能指向B类被public修饰的且类型为int的成员变量

因为bp指向的是偏移量,所以初始化时初始化为0xffffffff
在这里插入图片描述
value在类中的偏移量为8,所以bp的值为8
在这里插入图片描述

由类修饰指向函数的指针

class B
{
public:
	B(int x =0):value(x),sum(x+1){}
	static  void funb()
	{
		cout << "funb" << endl;
	}
	void func()
	{

	}
public:
	 int value;
	 char ch[3];
	 int sum;
};
int main()
{
	B b;
	void(*p)() = nullptr;
	void(B:: *p2)() = nullptr;//只能指向B中返回值为void,参数为void(还必须由隐含的this指针) 的成员函数
	//p2 = &B::funb; funb为静态函数,参数列表中没有this指针,不能指向
	p2 =&B::func;
	p2();//调用的时候也不能这样直接调用,因为还需要一个this指针
	(b.*p2)();//而是需要这样调用
	return 0;
}

p2只能指向B中返回值为void,参数为void(还必须由隐含的this指针) 的成员函数

被类修饰的指向函数的指针初始化为0
在这里插入图片描述
这种指针指向的不是偏移量,而是具体的函数地址,因为在对于类说,函数只有一份
在这里插入图片描述

调用的方式
假如b为B类型的对象,则为(b.*p2)();

命名空间

背景:

约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的,比如一个汇编代码里面包含 了一个函数foo,那么汇编器将它编译成目标文件后,foo在目标文件中的相对应符号也是foo,当后来UNIX平台和c语言发明时,已经存在了相当多使用汇编编写的库和目标文件,这样的话,当c程序要使用这些库时,c语言不可使用这些库中定义的函数和变量的名字作为符号名,否则就会根现有的目标文件产生冲突,比如有个用汇编编写的库中定义了一个函数main,那么我们在c语言中就不可以再定义一个main函数或变量了,如果一个c语言的目标文件想要用到使用Fortan语言编写的目标文件,我们也要防止它们的名称冲突,
为了防止符号名冲突UNIX下的c语言规定c语言源代码文件中的所有全局变量函数经过编译之后,相对应的符号名前应加上下划线" _",而Fortran语言的源代码经过编译之后,所有符号名前应加上" _“,后面也应加上” _"。
但是这种方法还没有从根本上解决符号冲突的问题,比如当程序很大时,不同模块由不同的部门开发,它们之间还可能会产生命名冲突,所有就有了命名空间这个东西。

命名空间主要是解决全局名字空间污染的问题(程序中全局实体名与其它程序中的全局实体名字冲突)

最基本的命名空间

 namespace wl
{
	int a;
}

命名空间之间的互相嵌套

namespace wl
{
	int a;
	namespace wl1
	{
		int a;
	}
}

编译器会把命名空间合并

编译器会自动把命名空间合并;
在这里插入图片描述
在这里插入图片描述

文件域

  • 一般变量默认都为extern
  • const 修饰的变量只能在本文件中使用,而要想在其它文件中使用,则必须显示的加上extern
  • static修饰的变量,只能在本文件中使用(符号表中被修饰成了 “l” (local))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【c++】的作用域 (局部域,类域,名字命名空间,文件域) 的相关文章

  • 02 四旋翼无人机的组成与拼装(上)

    02 四旋翼无人机的组成与拼装 xff08 上 xff09 目录1 总体介绍2 布局设计2 1 机身布局2 1 1 交叉形2 1 2 环形 比较少2 1 3 可折叠交叉形 2 2 旋翼安装2 2 1 常规布局 VS 共轴双桨2 2 2 力矩
  • 03 四旋翼无人机的组成与拼装(下)

    03 四旋翼无人机的组成与拼装 xff08 下 xff09 目录1 螺旋桨1 1 作用1 2 参数1 型号2 弦长3 转动惯量 重要 4 力效5 桨叶数6 安全转速7 静平衡与动平衡 2 电机2 1 作用2 2 工作原理2 2 1 相位切换
  • 05 无人机动态模型

    05 无人机动态模型 目录1 无人机动态模型简介1 1 无人机动态模型2 刚体运动与姿态表示2 1 如何描述一个刚体2 2 地球坐标系与机体坐标系2 3 坐标系旋转与向量旋转的区别2 4 旋转轴与旋转角2 5 欧拉角 xff08 1 xff
  • 06 飞行控制器

    06 飞行控制器 目录1 XTDrone动态模型代码讲解2 自动控制初步2 1 自动控制概述多旋翼飞行器控制实例 2 2 控制性能2 3 传递函数与状态方程示例 3 PID控制器3 1 PID控制器3 2 比例项调节3 3 积分项调节积分饱
  • Django-注册用户时候保存密码加密问题

    1 导入django内置模块 注册用户时候保存密码加密问题 from django contrib auth hashers import make password 2 获取post参数并创建用户并对密码加密 email 61 reque
  • FrankMocap

    FrankMocap 摘要介绍相关工作3D参数化人体模型单图像3D人体姿势估计单图像3D手姿势估计身体和手的联合3D姿势估计 方法SMPL X模型概述3D手估计模块手模块结构训练方法数据集预处理训练数据增强 3D身体估计模块整个身体集成模块
  • TortoiseGit间接处理linux目录下的仓库,用到window映射linux目录方案

    原始需求 习惯用TortoiseGit查看git仓库信息和历史日志 xff0c 但这个工具只支持window xff0c 我希望linux也能用虽然有其他linux的GUI的git工具 xff0c 但我用到的linux基本都是无界面版本 x
  • 关于C中的Int类型到底是几个字节。

    C语言标准是这样规定的 xff1a int最少16位 xff08 2字节 xff09 xff0c long不能比int短 xff0c short不能比int长 xff0c 具体位长由编译器开发商根据各种情况自己决定 在32位x86处理器上
  • Jetson TX2开启高功耗模式

    Jetson TX2 工作模式及相应的CPU和GPU频率 xff1a 上电的时候 xff0c 默认最低功耗模式1 xff0c 风扇不转 1 直接运行home下的jetson clocks sh xff0c 开启最大频率 sudo jetso
  • 在失望中重找希望——我的2013年工作总结

    时间过的真的是快 来广州已整整工作了一年啦 从2012年长沙工作离职后 为了我的女朋友 我毅然踏上了南下广州的征途 来到羊城后 很快 xff0c 一个礼拜就找到了现在工作的这家公司 现在回想一下 真觉得当初没有好好斟酌一下 2013年里 x
  • 【100%有效】解决AndroidStudio 控制台编译输出中文乱码,亲测解决!

    背景 在AndroidStudio中新建了一个Java Module xff0c 但是点击 Run app 之后 xff0c Build Output 控制台输出的中文都是乱码 xff0c 都是问号一样的字符 google了很多方法 xff
  • 图传数传模块

    文章中写了关于如何调摄像头的程序 https blog csdn net JanKin BY article details 103929781 如何将摄像头获取的视频发送到远端实现图传数传 xff0c 按RJ45的网口线路排布 xff0c
  • TX2系统烧录jetpack4.6 ubuntu18.04

    sdk版本与系统版本相关 xff0c 下载的4 6为ubuntu 18 04 1 烧录下jeston nvidia官方网站上下载sdk manager Jetson 下载中心 NVIDIA Developer sudo apt instal
  • 如何把UCF101数据集分成训练集和测试集

    34 After extracting the RAR we run this to move all the files into the appropriate train test folders Should only run th
  • 强国的语言与语言强国

    强国的语言与语言强国 作者 xff1a 教育部语言文字信息管理司司长 教育部语言文字应用研究所所长 中国社会科学院研究生 李宇明 理论上语言是一律平等的 xff0c 现实中语言是有强有弱的 语言的强弱与语言所属社团的强弱盛衰呈正相关 古罗马
  • 基于时间序列的异常检测算法小结

    最近在学习基于时间序列的异常检测算法 xff0c 看到一篇好文 xff0c 原文博客地址 xff1a http blog rexking6 top 2018 11 05 基于时间序列的异常检测 以下是相应的知识 xff1a 简介 搜罗了网上
  • Python函数

    定义函数 def def是定义define definition 的缩写 Python中使用def来定义函数 xff0c 函数的命名规则和变量的命名规则相同 函数名后的 xff08 xff09 用于传入参数 xff0c 函数体以冒号 xff
  • JDK和SDK的区别

    JDK和SDK的区别如下 xff1a 1 SDK是Software Development Kit的缩写 xff0c 中文意思是 软件开发工具包 这是一个覆盖面相当广泛的名词 xff0c 可以这么说 xff1a 辅助开发某一类软件的相关文档
  • 【无标题】

    GANimator Neural Motion Synthesis from a Single Sequence This repository provides a library for novel motion synthesis f
  • Effective C++(一):让自己习惯C++

    个人读书记录 xff0c 不适用教学内容 目录 条款01 xff1a 视C 43 43 为一个语言联邦 条款02 xff1a 尽量以const xff0c enum xff0c inline替换 define 条款03 xff1a 尽可能使

随机推荐

  • Effective C++(二):构造/析构/赋值运算

    个人读书记录 xff0c 不适用教学内容 目录 条款05 xff1a 了解C 43 43 默默编写并调用了哪些函数 条款06 xff1a 若不想使用编译器自动生成的函数 xff0c 就该明确拒绝 条款07 xff1a 为多态基类声明virt
  • Effective C++(三):资源管理

    个人读书记录 xff0c 不适用教学内容 目录 条款13 xff1a 以对象管理资源 条款14 xff1a 在资源管理类中小心copying行为 条款15 xff1a 在资源管理类中提供对原始资源的访问 条款16 xff1a 成对使用new
  • Unreal Engine工程项目目录及对应作用

    目录 vs Binaries xff1a 编译文件 Config xff1a 配置文件 Content xff1a 资产文件 DerivedDataCache xff1a UE针对平台特化的资源版本 Intermediate xff1a 中
  • Unreal Engine中的UHT和UBT

    UBT xff1a 附加在引擎之外的一个自定义工具 xff0c 用于管理跨各种构建配置 xff0c 来配置和构建 UE源码的过程 UHT xff1a 一个支持UObject系统的自定义解析和代码生成工具 目录 UBT xff08 Unrea
  • Unreal Engine项目目录结构

    目录 Engine 引擎源码文件 Games 项目工程文件 Visualizer VS编辑器配置文件 之前说的是工程目录结构 xff0c 这次来说项目目录结构 这里只是举了个例子 xff0c 实际请根据不同的UE版本自行分析 Engine
  • Unreal Engine的编译类型和命名规则

    目录 编译类型 命名规则 资源命名规则 文件夹命名规则 编译类型 debug game只能调试你的项目 xff0c 不能调试编辑器项目 多加了一个editor xff0c 就可以调试编辑器了 不同的编译类型可以理解为引擎在不同的类型下的监管
  • 面向对象设计的一些原则

    人很懒惰 xff0c 不愿意多写代码 xff0c 即便是Ctrl C 43 Ctrl V 也不愿意把别人的代码改来改去 xff0c 由此产生了各种复用的方法和设计原则 目录 单一职责原则 里氏转换原则 依赖倒置原则 迪米特原则 接口隔离原则
  • Unreal Engine中的Actor:理解、生成与消亡

    目录 谈谈Actor 生成 xff08 实例化 xff09 Acotr StaticClass UClass xff1a 类模板 类的快照 Actor的生命周期 Actor的消亡 Destroy xff1a 标记删除 SetLifeSpan
  • Android5.0网络之ipv6

    移动设备的大量兴起势必进一步加强ip地址不足的危机 ipv6或许成为一种比較好的选择方案 ipv6地址的获取分为两种方式 xff1a 无状态 xff1b 有状态 无状态 xff1a 通过接收路由公告 RA 来设置自己的ipv6地址 有状态
  • Unreal Engine中调试常用方法

    目录 常用调试方法 AddOnScreenDebugMessage UE LOG xff1a 在控制台看调试信息 在蓝图中直接调用PrintString 自定义日志分类 声明 定义 简化日志输出的宏 日志格式化输出 常用调试方法 在虚幻引擎
  • UE中的FString操作

    此篇是指单纯记录 xff0c 方便之后查阅 目录 创建 转型到FString FString转型到其他类型 字符串中是否包含指定串 查找给定串在其中是什么位置 字符串比较 读文件 裁剪字符串 编码解决的是文字问题 稍微细致一些的可以看 xf
  • 关于UE4/UE5的LogProperty: Warning: Serialized Class XXX for a property的尝试解决方案

    Warning reference will be nullptred Development Programming amp Scripting Epic Developer Community Forums unrealengine c
  • UE中的宏GENERATED_BODY()做了什么?

    宏GENERATED BODY做了什么 xff1f 阿佑001 博客园 cnblogs com 添加了一个静态函数static void StaticRegisterNativeUMyObject 声明结构体struct Z Constru
  • Unreal Engine 网络系统(一):网络模型及网络视角下的Gameplay框架

    个人学习记录 xff0c 如有错误请及时联系我 xff01 欢迎交流 xff01 1 客户端 服务器模型 服务器 xff1a 有一个客户端担当游戏状态的主控者 作用 xff1a 做出所有重要决定 xff0c 保证公平性 xff0c 包含所有
  • Unreal Engine 网络系统(二):网络对象同步、网络身份

    目录 网络身份 行为同步和属性同步 Actor网络身份 区分Client amp Server 身份授权类别 划分终端所在用途 思考几个问题 xff1a 什么是同步 xff1f 网络游戏中 xff0c 什么内容需要同步 xff1f 虚幻中的
  • Unreal Engine 网络系统(三):RPC同步

    目录 RPC RPC执行分三种形式 修改所有权 RPC 全称Remote Procedure Call xff0c 远端调用 指在本机上调用函数 xff0c 但在其他机器上远程执行的函数 RPC函数可以允许Client或Server通过网络
  • Unreal Engine 网络系统(四):UEC++的RPC

    目录 行为同步 On Server xff1a 服务端的RPC代码 On Client xff1a 客户端的RPC代码 NetMulticast xff1a 广播的RPC代码 属性同步 行为同步 借助UFUNCTION进行函数标记 UFUN
  • Unreal Engine 网络系统(五):带宽管理(相关性及优先级)

    目录 相关性 优先级 创建 查找 加入房间 xff08 Session xff09 网络游戏是通过计算机硬件通信方案将多台终端连接 xff0c 组建的玩家沟通环境 xff0c 从而使得玩家连接到一起游戏 受限于网络传输环境的影响 xff0c
  • 字串起始位置最大值

    给定两个字符串s1和s2 xff0c 如果s1删除若干个字符后变成s2 xff0c 则称s2为s1的子串 xff0c 求s2在s1中的起始位置的最大值 输入描述 xff1a 只有一行 s1 xff0c s2 xff0c s1和s2用空格隔开
  • 【c++】的作用域 (局部域,类域,名字命名空间,文件域)

    这里写目录标题 局部域类域类修饰指针由类限制修饰指向变量的指针由类修饰指向函数的指针 命名空间背景 xff1a 文件域 c 43 43 支持四个域 xff1a 局部域 xff0c 类域 xff0c 名字空间域 xff0c 文件域 局部域 函