C++类和对象上
1. 面向对象编程与面向过程编程的比较
我们一开始接触的C语言就是一门面向过程编程的语言,而C++就是一门面向对象编程的语言。那么这两者有什么区别呢?
举个例子,就比如说点外卖,如果是C语言的话,那么在程序的编写过程中更加注意于用户点外卖,商家接外卖,骑手送外卖。通过实现这几个过程来实现整个流程。但是如果说是C++的话,那么我们就会更加的看中用户,商家,骑手这三个类,即通过完善类来实现类与类之间的交互从而来实现整个流程。
2. 类的定义
class vector
{
public:........
private:.........
};
这就是一个类的定义。当然,我们也可以把这个class换成struct。
我们不止可以在里面写上成员变量,我们更可以在里面写上函数(叫做成员函数),一般来说我们会把函数头和函数实现写在一起,因为更方便。
PS:C++里面更喜欢写成class。
class student
{
public:void getInformation(){cout<<_name<<endl;cout<<_age<<endl;cout<<_class<<endl;}private:int _age;string _name;string _class;
}
PS:感觉上面那个例子不够明显,就在举了一个。
3. 类的访问限定符及封装
3.1 访问限定符
如图所示,访问限定符包含了这三类,分别为public,protect和private。
1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
PS:class和struct的区别是struct定义的类默认访问权限是public,class定义的类默认访问权限是private。
3.2 封装
封装,继承与多态是C++语法上的三大特性,我们在这里就来介绍一下封装。
什么叫封装呢?封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。
class student
{
public:void getInformation(){cout<<_name<<endl;cout<<_age<<endl;cout<<_class<<endl;}private:int _age;string _name;string _class;
}
比如说在这个代码中,一个学生的年龄,名字和班级,我并不希望查询的人可以随意的访问并修改。所以我在这里把他设置为private,我只希望别人可以查看信息,所以我写了一个函数来允许别人通过这个函数来进行查看。
4. 类的作用域
class student
{
public:void getInformation() private:int _age;string _name;string _class;
}
void student::getInformation()
{cout<<_name<<endl;cout<<_age<<endl;cout<<_class<<endl;
}
我们看,在这里就是通过在getInformation前面加上一个student::来表示这个函数是属于这个student类。
5. 类的实例化
class student
{
public:void getInformation(){cout<<_name<<endl;cout<<_age<<endl;cout<<_class<<endl;}private:int _age;string _name;string _class;
}
比如说在这个代码里面,student是无法直接使用的,要把它实例化成一个个学生的信息我们才可以通过getInformation()进行调用。
PS:一个类可以实例化多份对象。
5.1 类实例化后大小的计算
我们在这里要引入一个概念,叫做结构体内存对齐规则 。
1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
PS:之所以计算机没有直接堆着放是为了提高编译速度。想想看对齐了的话编译器就只要那几个位置就好,通过这种方式可以大大的提高编译速度。
6. this指针
6.1 什么是this指针
class student
{
public:void student(string name,int age,string class){ _name=name;_age=age;_class=class}void getInformation(){cout<<_name<<endl;cout<<_age<<endl;cout<<_class<<endl;}private:int _age;string _name;string _class;
}int main()
{student s1("小明",18,"一班");student s2("小红",19,"二班");s1.getInformation();s2.getInformation();return 0;
}
我们来看这个代码,相信很多人都可以看懂这份代码。那么我们有没有想过,在这份代码里面为什么 getInformation()可以识别s1和s2并对它们做出区分呢。
这里我们就要增加一个概念叫做this指针,这是一个并不用我们去写就会自己存在的一个指针,并且它的指向已经固定了。举个例子,我们在void student(string name,int age,string class)这个函数里面_name=name实际上是this._name=name,age和class也是同样的道理。所以,当我们调用s1的getInformation()的时候,编译器会自动访问s1里面的那个this指针。通过这样的方式来实现s1和s2的区分。
6.2 this指针的特性
6.3 this指针本身的位置
this指针本身的存储位置并非固定的,如果说一个类的参数比较少的话那么系统或者说编译器就会把this指针存放在寄存器上,如果说类的参数比较多的话,那么会被放在栈上。
那么为什么shis要先寄存器在栈呢,这是因为寄存器传递速度快。
PS:99%的情况下this本身是存在栈上的。
相关文章:
C++类和对象上
1. 面向对象编程与面向过程编程的比较 我们一开始接触的C语言就是一门面向过程编程的语言,而C就是一门面向对象编程的语言。那么这两者有什么区别呢? 举个例子,就比如说点外卖,如果是C语言的话,那么在程序的编写过程…...
hadoop的三大结构及各自的作用
Hadoop 分布式文件系统(HDFS) 存储大量数据:HDFS 被设计用于在商品硬件上存储海量数据,它将大文件分割成多个数据块,并分布存储在集群中的不同节点上,支持数据的可靠存储和高效访问。提供数据冗余和容错机制…...
珈和科技遥感赋能农业保险创新 入选省级卫星应用示范标杆
为促进空天信息与数字经济深度融合,拓展卫星数据应用场景价值,提升卫星数据应用效能和用户体验,加速卫星遥感技术向民生领域转化应用,近日,湖北省国防科工办组织开展了2024年湖北省卫星应用示范项目遴选工作。 经多渠…...
香港服务器CPU对比:Intel E3与E5系列核心区别与使用场景
香港服务器的 CPU 配置(核心数与主频)直接决定了其并发处理能力和数据运算效率,例如高频多核处理器可显著提升多线程任务响应速度。在实际业务场景中,不同负载需求对 CPU 架构的要求存在显著差异——以 Intel E3 和 E5 系列为例,由于两者在性…...
【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 本文深入探讨了如何利用 DeepSeek R1 模型结合检索增强生成(RAG)技术,构建一个高效的知识增强型问答系统。RAG 技术通过结合信息检索与生…...
得佳胜哲讯科技 SAP项目启动会:胶带智造新起点 数字转型新征程
在全球制造业加速向数字化、智能化转型的浪潮中,胶带制造行业正迎来以“自动化生产、数据化运营、智能化决策”为核心的新变革。工业互联网、大数据分析与智能装备的深度融合,正推动胶带制造从传统生产模式向“柔性化生产精准质量控制全链路追溯”的智慧…...
超导体的应用价值:超导磁探测技术开启科技与生活的新变革
科技的飞速发展,带来了一种新型材料的快速应用,那就是超导体材料。超导体的特性,能够为当今社会众多领域带来革命性的变革,也将极大的改变我们现在的生活质量。 超导体的特性 超导体是指在特定温度下的电阻会突然消失,…...
UNION和UNION ALL的主要区别
UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下: 1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而UNION ALL不会…...
软件项目验收报告模板
软件项目验收报告 一、项目基本信息 项目名称XX智能仓储管理系统开发单位XX科技有限公司验收单位XX物流集团合同签订日期2023年3月15日项目启动日期2023年4月1日验收日期2024年1月20日 二、验收范围 入库管理模块(包含RFID识别、库存预警)出库调度模…...
第五章 SQLite数据库:5、SQLite 进阶用法:JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块
一、JOIN:跨表查询的核心机制 1. JOIN 类型总览 JOIN 是连接多个表获取综合信息的关键手段。常见 JOIN 类型如下: INNER JOIN(内连接):仅返回两个表中满足连接条件的行。LEFT OUTER JOIN(左连接…...
中间件--ClickHouse-10--海量数据存储如何抉择ClickHouse和ES?
在Mysql数据存储或性能瓶颈时,采用冷热数据分离的方式通常是一种选择。ClickHouse和Elasticsearch(ES)是两个常用的组件,但具体使用哪种组件取决于冷数据的存储目的、查询模式和业务需求等方面。 1、核心对比 (1&…...
JESD204B标准及其在高速AD采集系统中的应用详解
一、JESD204B协议的本质与核心价值 JESD204B是由JEDEC制定的第三代高速串行接口标准(2011年发布),专为解决高速ADC/DAC与FPGA/ASIC间数据传输瓶颈而设计。其核心突破体现在: 速率革命性提升 支持每通道最高12.5Gbps(通…...
给予FLUX更好的控制:FLUX.1-dev-ControlNet-Union-Pro-2.0
Shakker Labs FLUX.1-dev-ControlNet-Union-Pro-2.0 一、模型概述 Shakker Labs发布的FLUX.1-dev-ControlNet-Union-Pro-2.0是一个统一的ControlNet模型,专为FLUX.1-dev模型设计。该模型在前一版本基础上进行了多项改进,包括移除模式嵌入以减小模型尺寸…...
Hadoop的三大结构及其作用?
Hadoop是一个分布式存储和计算框架,其三大核心组件是HDFS(Hadoop Distributed File System)、YARN(Yet Another Resource Negotiator)和MapReduce。它们各自有着重要的作用,共同构成了Hadoop生态系统的基础…...
langgraph框架之初识
1.什么是langgraph? LangGraph 是一个用于构建可控代理的底层编排框架。在AI中,代理也就是执行动作的智能体,也就是agent。使用这个框架可以构建一个可以自由控制的智能执行体,它可以帮我们做许多事情,如下࿱…...
3个实用的脚本
1. Linux 系统清理临时文件脚本 该脚本用于清理系统中 /tmp 目录下超过 7 天的临时文件。 #!/bin/bash# 清理 /tmp 目录下超过 7 天的文件 find /tmp -type f -atime 7 -exec rm -f {} \;# 清理 /var/tmp 目录下超过 7 天的文件 find /var/tmp -type f -atime 7 -exec rm -f {…...
Vue3 Composition API与十大组件开发案例详解
文章目录 一、Vue3核心API解析1.1 Composition API优势1.2 核心API 二、十大组件开发案例案例1:响应式表单组件案例2:动态模态框(Teleport应用)案例3:可复用列表组件案例4:全局状态通知组件案例5࿱…...
万用表判断MOS好坏
无论什么封装,D极一般在正面看的上面,或者焊盘面积最大的一面: 【零】烧个洞的那种,不用量了,一眼损坏 【一】万用表的二极管档位测量 检修:使用万用表的二极管档位,S极接红表笔,黑…...
算法驱动光场革命:SLM技术引领智能光学新时代
◀背景引入▶ 空间光调制器本质上是一种能够对光波的振幅、相位或偏振状态进行空间分布调制的动态光学器件,我司自主研发的SLM产品采用硅基液晶技术,通过电信号控制液晶分子的排列状态,实现对入射光波的精确调控。这种精确调控能力使得SLM成…...
webgl入门实例-11WebGL 视图矩阵 (View Matrix)基本概念
WebGL 视图矩阵 (View Matrix) 在WebGL中,视图矩阵(View Matrix)定义了观察者(相机)在世界空间中的位置和方向,它实现了从世界坐标系到相机坐标系的转换。 什么是视图矩阵? 视图矩阵是一个4x4的矩阵,用于: 将场景从…...
ESP32 搭建IDF+Vscode环境(详细教程)
1. IDF环境安装 1.1 ESP-IDF介绍 ESP-IDF (Espressif IoT Development Framework) 是 Espressif( 乐鑫) 公司提供的面向ESP32 系列 的官方开源开发框架,用于开发物联网应用。ESP-IDF 的特点是高度的集成性和可移植性,提供了完整的 SDK,…...
精准计量+AI管控——安科瑞助力高校水电管理数字化转型
安科瑞顾强 传统管理痛点:效率低、隐患多、成本高 高校后勤水电管理长期面临多重挑战:人工抄表需宿管逐层逐户记录,耗时耗力且易出现漏抄、错抄,导致费用核算不公;老旧机械式电表误差率高达5%-10%,计量纠…...
PHP腾讯云人脸核身获取SIGN Ticket
参考腾讯云官方文档:人脸核身 获取 SIGN ticket_腾讯云 前提条件:已经获取了access_token。获取方法可参考: PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getSignTicket(){$access_token file_get_contents(/data/confi…...
探索 Higress:下一代云原生 API 网关
引言 在云原生时代,API 网关作为连接客户端与后端服务的桥梁,扮演着至关重要的角色。Higress 是一款由阿里巴巴开发的先进云原生 API 网关,基于开源的 Istio 和 Envoy 构建。它通过将流量网关、微服务网关和安全网关三者高度集成,…...
UE5编辑器静止状态下(非 Play 模式)睫毛和眼睛的渲染是正常的,而在 Play 模式下出现模糊
这通常指向以下几个 运行时(Runtime) 特有的原因: 抗锯齿 (Anti-Aliasing) 方法,特别是 Temporal Anti-Aliasing (TAA): 这是最可能的原因。 UE5 默认启用的 TAA 通过混合多帧信息来平滑边缘和减少闪烁,尤其是在运动中…...
ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)
1. 环境 虚拟机镜像ISO:ubuntu-24.04.2-live-server-arm64.iso 2. 定制cloud-init镜像 2.1 安装OS 基于ubuntu-24.04.2-live-server-arm64.iso,通过virt-manager安装操作系统,语言建议选择英文,分区选择基于LVM的自动分区&…...
解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)
0. 写在前面 到底遇到了什么问题? 简洁版: 在 Oracle 与 Neo4j 共存的多数据源项目中,一个仅涉及 Oracle 操作的请求,却因为 Neo4j 连接失败而报错。根本原因是 Spring 的默认事务管理器错误地指向了 Neo4j,导致不相…...
直线轴承在自动化机械设备中的应用
直线轴承作为机械传动系统中的关键部件,凭借其高精度、低摩擦和稳定性能,被广泛应用于各类自动化设备中。以下是直线轴承在自动化领域的典型应用场景: CNC机床 在数控机床的进给系统中,直线轴承与精密导轨配合使用,为刀…...
生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍...
6.数据手册解读—运算放大器(二)
目录 6、细节描述 6.1预览 6.2功能框图 6.3 特征描述 6.3.1输入保护 6.3.1 EMI抑制 6.3.3 温度保护 6.3.4 容性负载和稳定性 6.3.5 共模电压范围 6.3.6反相保护 6.3.7 电气过载 6.3.8 过载恢复 6.3.9 典型规格与分布 6.3.9 散热焊盘的封装 6.3.11 Shutdown 6.4…...
010数论——算法备赛
数论 模运算 一般求余都是对正整数的操作,如果对负数,不同编程语言结果可能不同。 C/javapythona>m,0<a%m<m-1 a<m,a%ma~5%32~-5%3 -21(-5)%(-3) -2~5%(-3)2-1正数:(ab)%m((a%m)(b%m))%m~正数ÿ…...
算法01-最小生成树prim算法
最小生成树prim算法 题源:代码随想录卡哥的题 链接:https://kamacoder.com/problempage.php?pid1053 时间:2025-04-18 难度:4⭐ 题目: 1. 题目描述: 在世界的某个区域,有一些分散的神秘岛屿&…...
轻量化高精度的视频语义分割
Video semantic segmentation (VSS)视频语义分割 Compact Models(紧凑模型) 在深度学习中,相对于传统模型具有更小尺寸和更少参数数量的模型。这些模型的设计旨在在保持合理性能的同时,减少模型的计算和存储成本。 紧凑模型的设计可以涉及以下一些技术: 深度剪枝(Deep…...
【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)
背景: 终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。 已完成部分: 关于python调用大模型的,可以参考之前的…...
Android守护进程——Vold (Volume Daemon)
简介 介绍:Vold 是用来管理 android 系统的存储设备,如U盘、SD卡、磁盘等移动设备的热插拔、挂载、卸载、格式化 框架结构:Vold 在系统中以守护进程存在,是一个单独的进程。处于Kernel和Framework之间,是两个层级连接…...
【实体转换】mapstruct详解
大家好,我是jstart千语。今天来给大家讲讲在项目中经常可以使用得到的一个“工具”,就是mapstruct。 一、工具介绍 这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发…...
部署路线Ubuntu_MySQL_Django_绑定域名
第 1 步:绑定域名(DNS) 在域名服务商后台(例如阿里云 / 腾讯云 / Cloudflare)中设置: A 记录 →域名 → 指向服务器公网 IP 可选:也加一个 www.域名 → 同样指向服务器 第 2 步:安…...
大屏设计与汇报:政务服务可视化实践
大屏设计与汇报:政务服务可视化实践 引言 在政务服务数字化转型浪潮中,大屏设计成为展现业务能力与数据价值的关键手段。本文围绕政务大屏设计,从设计要点、业务逻辑到汇报技巧展开深入探讨,为相关从业者提供全面参考。 一、大屏设计核心要点 (一)多维度考量 设计大…...
【MySQL】数据库和表的操作详解
目录 一、数据库: 1、查看数据库: 2、创建数据库: 3、删除数据库: 4、数据库的编码问题: 5、校验规则对数据库的影响: 6、修改数据库: 7、库的备份与恢复: 8、查看链接情况…...
从PDF到播客:MIT开发的超越NotebookLM的工具
NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…...
ubuntu系统上基于RKE2部署K8S及Rancher
由于我们特殊的网络环境,所以只能使用国内资源来进行安装 - Rancher Releases Mirrors:https://mirror.rancher.cn/ - 阿里云镜像仓库:registry.cn-hangzhou.aliyuncs.com 1、配置资源仓库及token rootdemo-1:~# mkdir -p /etc/rancher/r…...
STM32单片机入门学习——第40节: [11-5] 硬件SPI读写W25Q64
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.18 STM32开发板学习——第一节: [1-1]课程简介第40节: [11-5] 硬件SPI读…...
vue3学习笔记之属性绑定
属性绑定 1. 基本语法 在 Vue 3 里,使用 : 或者 v-bind: 来进行属性绑定。这两种写法是等价的,: 是 v-bind: 的缩写形式。以下是示例代码: <template><!-- 使用缩写形式 --><img :src"imageUrl" alt"An exa…...
C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式
int A(参数...) override { return 某个对象.A(参数...);} 一.目标 本文将用一个简单的“数学运算器”例子,从零解释以下 C 语法特性: virtual 虚函数 override 重写关键字 函数体内部的“转发调用” 数组引用作为函数参数 适合初学者和希望加深…...
Spring_MVC 快速入门指南
Spring_MVC 快速入门指南 一、Spring_MVC 简介 1. 什么是 Spring_MVC? Spring_MVC 是 Spring 框架的一个模块,用于构建 Web 应用程序。它基于 MVC(Model-View-Controller)设计模式,将应用程序分为模型(M…...
Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现
背景 最近在研究了一下 Starrocks的tablet的Rebalance的能力,这里进行记录一下 本文基于 StarRocks 3.3.5 结论 数据的rebalance 主要以两种模式来进行: 按照磁盘的使用率进行移动,如果每个BE的磁盘使用率不足tablet_sched_balance_load_…...
设计模式之工厂方法模式
1. 核心思想 工厂方法模式(Factory Method Pattern)将对象的创建过程延迟到子类。具体来说,定义一个创建对象的接口(抽象工厂),但由子类决定实例化哪个具体类。这种方式解耦了对象的创建和使用,…...
ubuntu学习day3
3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候,要使用一系列的工具,我们称之为工具链。SDK就是编译工具链的简写,我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本,从而确定某些语法特性是否可用,…...
【从零实现高并发内存池】申请、释放内存过程联调测试 与 大于256KB内存申请全攻略
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
element-plus添加暗黑模式
main.ts文件 //引入暗黑模式样式 import "element-plus/theme-chalk/dark/css-vars.css"; style.scss文件 // 设置默认主题色 :root {--base-menu-min-width: 80px;--el-color-primary-light-5: green !important;--route--view--background-color: #fff !import…...