高程 | 数据的共享与保护(c++)

news2024/11/28 3:49:32

文章目录

  • 📚标识符的作用域与可见性
    • 🐇作用域
    • 🐇可见性
  • 📚对象的生存期
    • 🐇静态生存期
    • 🐇动态生存期
  • 📚类的静态成员
    • 🐇静态数据成员
    • 🐇静态函数成员
  • 📚类的友元
  • 📚共享数据的保护

📚标识符的作用域与可见性

🐇作用域

  • 作用域是一个标识符在程序正文中有效的区域。
  • ⭐️函数原型作用域
    • 是C++程序中最小的作用域。
    • 在函数原型声明时形参的作用范围就是函数原型的作用域。
    • double area (double radius) //标识符radius的作用在area形参列表的左右括号之间。
  • ⭐️局部作用域
    • 函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止;
    • 函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止;
    • 具有局部作用域的变量也称为局部变量。
  • ⭐️类作用域
    • 类可以被看成是一组有名成员的集合,类X的成员m具有类作用域,对m的访问方式有三种
      • 如果X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可直接访问成员m;
      • 通过表达式 x.mX::m。这是程序中访问对象成员的最基本方法;
      • 通过 ptr->m这样的表达式,其中ptr为指向X类的一个对象的指针。
  • ⭐️命名空间作用域:具有命名空间作用域的变量也称全局变量。

🐇可见性

  • 程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。
  • 可见性规则
    • 声明在前,使用在后。
    • 同一作用域中,不能声明同名的标识符。
    • 在没有互相包含关系的不同作用域中声明的同名标识符互不影响。
    • 在两个或多个具有包含关系的作用域中声明同名标识符,则外层标识符在内层不可见。
      在这里插入图片描述

📚对象的生存期

🐇静态生存期

  • 如果对象的生存期与程序运行期相同,则称它具有静态生存期。
    • 在命名空间作用域中声明的对象都具有静态生存期。
    • 如果要在函数内部作用域中声明具有静态生存期的对象要用关键字static
    • 局部作用域中静态变量特点:不会随着每次函数调用而产生一个副本,也不会随着函数返回而失效。

🐇动态生存期

  • 除了上述两种情况,其余对象都具有动态生存期。
  • 在局部作用域中声明具有动态生存期的对象,也称局部生存期对象。
  • 局部生存期对象诞生于声明点,结束于声明所在的块执行完毕之时。

📚类的静态成员

  • 类的静态成员用来解决一个类的不同对象之间数据和函数共享问题

🐇静态数据成员

  • 若某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态成员。
  • 类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。
  • 静态数据成员具有静态生存期。
  • 由于静态数据成员不属于任何一个对象,因此可通过类名对它进行访问,类名::标识符
  • 之所以类的静态数据成员需要在类定义之外再加定义,是因为需要以这种方式专门为它们分配空间。非静态数据成员无须以此方式定义,因为它们的空间是与它们所属对象的空间同时分配的。

🐇静态函数成员

  • 使用static关键字声明的函数成员。
  • 静态函数成员可以通过类名或对象名来调用,而非静态成员函数只能通过对象名来调用(一般习惯于通过类名调用。即使通过对象名调用,起作用的也只是对象的类型信息,与使用的具体对象无关)。
  • 静态成员函数可以直接访问该类的静态数据和函数成员。而访问非静态成员,必须通过对象名。

📚类的友元

  • 友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
  • 在一个类中,可以利用关键字friend将其他函数或类声明为友元。
  • 如果友元是一般函数或类的成员函数,称为友元函数;如果友元是一个类,则称为友元类,友元类的所有成员函数都自动成为友元函数。
  • 友元函数
    • 是在类中用关键字friend修饰的非成员函数。
    • 虽然不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。
  • 友元类
    • 若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
  • ⚠️注意
    • 友元关系不能传递
    • 友元关系是单向的
    • 友元关系不被继承

📚共享数据的保护

  • 常对象
    • 它的数据成员值在对象的整个生存期内不能被改变。即:常对象必须进行初始化,而且不能被更新
    • 声明常对象: const 类型说明符 对象名;
  • 用const修饰的类成员
    • ⭐️常成员函数类型说明符 函数名 (参数表)const;
      • const是函数类型的一个组成部分,因此在函数的定义部分也要带const关键字。
      • 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他函数。
      • 无论是否通过常对象调用常成员函数,在常成员函数调用期间目的对象都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数
        在这里插入图片描述
    • ⭐️常数据成员:构造函数对该数据成员进行初始化,就只能通过初始化列表。
    • ⭐️常引用
      • 在声明引用时用const修饰,常引用所引用的对象不能被更新。
      • const 类型说明符 &引用名;
      • 非const的引用只能绑定到普通对象;但常引用可以绑定到(非)常对象,无论绑定哪一种引用后只能把对象当常对象。

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

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

相关文章

什么是位段?位段的作用是什么?他与结构体有什么关系?

目录 1.什么是位段? 2.位段的内存分配 判断当前机器位段的内存分配形式 1.什么是位段? 位段的声明和结构是类似的,有两个不同: 1.位段的成员必须是 int、unsigned int 或signed int或char 。 2.位段的成员名后边有一个冒号和…

相机图像质量研究(13)常见问题总结:光学结构对成像的影响--鬼影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

STM32 I2C

目录 I2C通信 软件I2C读写MPU6050 I2C通信外设 硬件I2C读写MPU6050 I2C通信 R/W:0写1读 十轴:3轴加速度,3轴角速度,3轴磁场强度和一个气压强度 软件I2C读写MPU6050 MyI2C.c #include "stm32f10x.h" …

【智能家居入门4】(FreeRTOS、MQTT服务器、MQTT协议、微信小程序)

前面已经发了智能家居入门的1、2、3了,在实际开发中一般都会使用到实时操作系统,这里就以FreeRTOS为例子,使用标准库。记录由裸机转到实时操作系统所遇到的问题以及总体流程。相较于裸机,系统实时性强了很多,小程序下发…

[NSSRound#16 Basic]Web

1.RCE但是没有完全RCE 显示md5强比较,然后md5_3随便传 md5_1M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2M%C9h%FF%0E%E3%5C%20%95r%D4w…

物流快递管理系统

文章目录 物流快递管理系统一、系统演示二、项目介绍三、13000字论文参考四、系统部分页面展示五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 物流快递管理系统 一、系统演示 校园物流快递管理系统 二、项目介绍 主要技术…

用HTML5实现动画

用HTML5实现动画 要在HTML5中实现动画&#xff0c;可以使用以下几种方法&#xff1a;CSS动画、使用<canvas>元素和JavaScript来实现动画、使用JavaScript动画库。重点介绍前两种。 一、CSS动画 CSS3 动画&#xff1a;使用CSS3的动画属性和关键帧&#xff08;keyframes&…

备战蓝桥杯---数据结构之好题分享1

最近几天在刷学校的题单时&#xff0c;发现了几道十分巧妙又有启发性的题&#xff0c;借此来记录分享一下。 看题&#xff1a; 从整体上看似乎没有什么规律&#xff0c;于是我们从小地方入手&#xff0c;下面是图解&#xff1a; 因此&#xff0c;我们用栈的数据结构实现即可&a…

模拟算法总结(Java)

目录 模拟算法概述 练习 练习1&#xff1a;替换所有的问号 练习2&#xff1a;提莫攻击 练习3&#xff1a;Z字形变换 模拟算法概述 模拟&#xff1a;根据题目要求的实现过程进行编程模拟&#xff0c;即题目要求什么就实现什么 解决这类题目&#xff0c;需要&#xff1a; 1…

C 语言 devc++ 使用 winsock 实现 windows UDP 局域网发送消息

U参考来源 U 这里移植到windows 上 &#xff0c;使用 devc 开发。 服务端代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <winsock2.h>int main() {WORD sockVersion MAKEWORD(2, 2);WSAD…

【嵌入式移植】6、U-Boot源码分析3—make

U-Boot源码分析3—make all 从【嵌入式移植】4、U-Boot源码分析1—Makefile文章中可知执行make命令的时候&#xff0c;没有指定目标则使用默认目标PHONY&#xff0c;PHONY依赖项为_all all scripts_basic outputmakefile scripts dtbs。 all Makefile中第129行指定默认目标PH…

协调尺度:特征缩放在机器学习中的重要作用

目录 一、介绍 二、背景知识 三、了解功能缩放 四、特征缩放方法 五、特征缩放的重要性 六、实际意义 七、代码 八、结论 一、介绍 特征缩放是机器学习和数据分析预处理阶段的关键步骤&#xff0c;在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的…

蓝桥杯每日一题----单调栈和单调队列

单调栈和单调队列 单调栈 单调栈即栈内的元素是单调递减或者单调递增的&#xff0c;我们通过一个题目来理解。 单调栈模板题 题目描述 给出项数为 n 的整数数列 a 1 … a n a_1…a_n a1​…an​。 定义函数 f ( i ) f(i) f(i)代表数列中第 i 个元素之后第一个大于 a i …

安卓游戏开发框架应用场景以及优劣分析

一、引言 在移动游戏开发领域&#xff0c;选择合适的开发框架是项目成功的关键因素之一。特别是对于安卓平台&#xff0c;由于其开放性和庞大的用户基础&#xff0c;不同的游戏开发框架应运而生&#xff0c;旨在帮助开发者高效地构建游戏应用。以下是一些流行的安卓游戏开发框架…

OpenAI全新发布文生视频模型Sora - 现实,不存在了

OpenAI&#xff0c;发他们的文生视频大模型&#xff0c;Sora了。。。。。 而且&#xff0c;是强到&#xff0c;能震惊我一万年的程度。。。 https://openai.com/sora 如果非要用三个词来总结Sora&#xff0c;那就是“60s超长长度”、“单视频多角度镜头”和“世界模型” &am…

五、DataX源码分析、性能参数优化

DataX源码分析 一、总体流程二、程序入口1.datax.py2.com.alibaba.datax.core.Engine.java3.切分的逻辑并发数的确认 3.调度3.1 确定组数和分组算法3.2 数据传输 三、DataX性能优化1.关键参数2.优化&#xff1a;提升每个 channel 的速度3.优化&#xff1a;提升 DataX Job 内 Ch…

SpringBoot3 + Vue3 由浅入深的交互 基础交互教学

说明&#xff1a;这篇文章是适用于已经学过SpringBoot3和Vue3理论知识&#xff0c;但不会具体如何实操的过程的朋友&#xff0c;那么我将手把手从教大家从后端与前端交互的过程教学。 目录 一、创建一个SpringBoot3项目的和Vue3项目并进行配置 1.1后端配置: 1.1.1applicatio…

php基础学习之作用域和静态变量

作用域 变量&#xff08;常量&#xff09;能够被访问的区域&#xff0c;变量可以在常规代码中定义&#xff0c;也可以在函数内部定义 变量的作用域 在 PHP 中作用域严格来说分为两种&#xff0c;但是 PHP内部还定义一些在严格意义之外的一种&#xff0c;所以总共算三种—— 局部…

紫微斗数双星组合:廉贞天相在子午

文章目录 前言内容总结 前言 紫微斗数双星组合&#xff1a;廉贞天相在子午 内容 紫微斗数双星组合&#xff1a;廉贞天相在子午 性格分析 廉贞星最喜天相星同度来制其恶&#xff0c;因天相星之水可剋制廉贞星之火。廉贞星最喜天相星同度来制其恶&#xff0c;使廉贞星变为较温…

MySQL 基础知识(六)之数据查询(二)

目录 6 数值型函数 7 字符串函数 8 流程控制函数 9 聚合函数 10 分组查询 (group by) 11 分组过滤 (having) 12 限定查询 (limit) 13 多表查询 13.1 连接条件关键词 (on、using) 13.2 连接算法 13.3 交叉连接 (cross join) 13.4 内连接 (inner join) 13.5 外连接 …