探索C++面向对象:从抽象到实体的元规则(上篇)
前引:在计算机科学的浩瀚星空中,面向对象编程(OOP) 无疑是照亮现代软件开发的核心范式。而 C++ 作为一门兼具高性能与抽象能力的系统级语言,其类与对象的语法设计更是开发者构建复杂系统的“元规则”。你是否曾困惑于 封装与暴露的边界?是否在继承与多态的迷宫中迷失方向?又是否理解一个简单的 new 操作符背后,内存如何为对象分配生命?本文将深入 C++ 类与对象的语法内核,从底层原理到实战设计,带你揭开面向对象编程的神秘面纱!
目录
认识:面向过程与面向对象
面向过程
面向对象
类的引入
为何访问类里面的成员函数不需要传址
类的定义
类的两种定义方式
声明+定义结合
声明 定义分开
类定义的良好习惯
类的限定访问及封装
C++中的class与C中的struct区别
类的封装
类的作用域
限定范围别人如何访问
类的实例化
不同的实例化
类的对象模型
计算类对象的大小
结构体对齐规则
认识:面向过程与面向对象
面向过程
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题
例如:
面向对象
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成
类的引入
类在C++中其实是由结构体进化而来的!在C中结构体是用来放成员变量的,而在C++结构体进化为类之后,可以放函数了!这样对比C更加的快捷、方便,下面我们来体会一下!
struct structspace
{//定义成员变量int size;int* newnode;//定义成员函数int Arr(int data = 10){return data *= 2;}
};
现在我们来调用类里面的函数,看看效果
现在我们来用 类 简单实现一个栈看看,加深对成员函数的使用与理解
struct structspace
{//定义成员变量int size;int* newnode;//定义成员函数void Preliminary(){//初始化newnode = (int*)malloc(sizeof(int) * MAX);if (newnode == NULL){perror("空间开辟失败\n");return;}size = 0;}void Push(int data = 1){assert(newnode);//存储进栈newnode[size++] = data;}void Read(){//打印栈顶元素assert(newnode);if (size == MAX){perror("栈满\n");return;}std::cout << "栈顶元素: " << newnode[size - 1] << std::endl;}void Destory(){//销毁栈assert(newnode);size = 0;free(newnode);newnode = nullptr;std::cout << "销毁成功" << std::endl;}
};
我们来看看使用成员函数的效果!
在C++中,我们习惯将关键字 struct 替换为关键字 class ,其它属于扩展,我们下面细说!
为何访问类里面的成员函数不需要传址
大家看下面两幅图,看看用C语言写和用C++写一个栈的区别!
函数是通过传参去访问变量的,通过函数单独实现某个功能,这个函数是独立存在的,而函数的参数是进行拷贝还是传址是根据需求来看的,这里我们需要改变结构体的成员,需要传址访问
而类是直接访问成员的,固不用去在成员函数里面去设置传址操作!
类的定义
类的组成:
(1)在C++中,class 为定义类的关键字,后面接类的名字,形成类型,同样可以使用 typedef
(2){ } 中的成员变量、成员函数依旧为主体
(3){ }后面依旧需要一个分号以示结尾
(4)类中的变量成为类的属性 或者 成员变量;类中的函数称为类的方法 或者 成员函数
类的两种定义方式
一般情况下我们是尽量选择第二种的,这种其实就是把之前C中的声明写入类里面,函数的定义再加一个类名即可,并不难!
声明+定义结合
顾名思义就是将成员函数的声明与定义全部写在一起,例如:
struct structspace
{//定义成员变量int size;int* newnode;//定义成员函数int Arr(int data = 10){return data *= 2;}
};
如果将声明与定义写在一起,编译器可能将其当做内联函数处理!
因此我们可以将这种情况用内联函数的要求来进行规定:对于递归、太长的函数我们不要这么做!
声明 定义分开
分开倒是很好理解,就跟之前C中写函数一样,那么如何让它成为成员函数呢?
解决方案: 分开定义的成员函数加上类名,例如:
class Structspace
{//成员变量int data;int* newnode;//成员函数void Arr(int a = 5);
};
下面我们在另一个文件中实现定义:
void Structspace::Arr(int a)
{std::cout << a << std::endl;
}
注意:函数缺省声明与定义只能存在一个,否则会进行报错
类定义的良好习惯
相信大家在上面已经有一种感觉了,就是:如果两个变量一模一样,看起来没那么的流程,例如:
class Structspace
{//成员变量int data;int* newnode;//成员函数void Arr(int data = 5){data = data;}
};
因此,我们推荐一个好的习惯:成员变量 和 函数形参 作一个区分,也是为了以后快速适应工作!下面我们看看改进版是如何看起来赏心悦目的!
class Structspace
{//成员变量int _data;int* newnode;//成员函数void Arr(int data = 5){_data = data;}
};
类的限定访问及封装
如何理解呢?
例如一部电脑,它给你的是USB接口等等,你只能通过固定的位置去给它充电、关机等一系列操作,而不是将里面的构造直接展现给你操作,那样估计买完一个星期内就出问题了.......
这里的类也是一样
以后如果进行工程合并,别人直接访问你自己定义的类里面的全部成员吗?那样安全性不高
所以我们针对这个情况,C++对类的使用通过以下三个限定符对定义的类来进行保护:
(1)public 修饰的成员在类外可以直接被访问
(2)protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
(3) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
(4)如果后面没有访问限定符,作用域就到 } 即类结束。
(5)class的默认访问权限为private,struct 为 public(因为struct要兼容C)
C++中的class与C中的struct区别
C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来定类。和class定义类是一样的,
区别是struct定义的类默认访问权限是public,class定义的类 默认访问权限是private
注意:class 和 struct 没有本质区别,唯一区别在于:class默认为私有,struct默认为公有
类的封装
在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来 隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用
下面我们来用访问限定符封装类
类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中,我们通常是二者结合使用!
(1)在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域,这里和上面的跨文 件分开成员函数的声明和定义同理
class Structspace
{//成员变量int _data;int* newnode;//成员函数void Arr(int data = 5);
};//在类外定义函数(指明类区域)
void Structspace::Arr(int data)
{_data = data;
}
(2)使用限定符划分区域
class Structspace
{
public://成员变量int _data;int* newnode;private://成员函数void Arr(int data = 5);
};
限定范围别人如何访问
我们使用 prevate 修饰之后,虽然设置了区域保护,但是并不是完全只能自由访问,我们可以通过:(这里先只了解,后面会进行学习哦!)
(1)设置友元
(2)写一个函数,把成员变量引用返回,在类外进行访问
类的实例化
例如:
类的设置仿佛一个建筑图纸,实例化仿佛就是将图纸变成实实在在的房子
首先类的设置是没有去使用空间的,只有实例化之后才会具体开辟空间且占用空间
那么什么是实例化?我们直接上例子,这样更好理解:
创建变量时记得不要加 前面的前缀:class
//类的实例化
Structspace St1;
不同的实例化
不同的实例化仿佛是根据图纸去创造出不同的房子,比如:
//类的实例化Structspace St1;//不同的实例化Structspace St2;
类的对象模型
计算类对象的大小
我们通过实例来进行探索(下面是类对象的三种形式):
(1)只有成员变量
class Structspace1
{//成员变量int _data;int* newnode;
};
(2)只有成员函数
class Structspace2
{//成员函数void Arr(int data = 5);
};
(3)既有成员变量也有成员函数
class Structspace3
{//成员变量int _data;int* newnode;//成员函数void Brr(int data = 5);
};
下面我们来看看三个类对象大小的计算结果对比:
结论:
一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐
注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象
那么加上限定符之后会变化吗?
加上限定符之后也是同理,这里我们方便测试,只有成员变量:
class Structspace3
{//成员变量int _data;int* newnode;int _pc;
};class Structspace4
{public://成员变量int _data;int* newnode;private:int _pc;
};
结构体对齐规则
(1) 第一个成员在与结构体偏移量为0的地址处
(2) 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8
(3)结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍
(4) 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍
面试题:
(1)结构体怎么对齐? 为什么要进行内存对齐?
(2)如何让结构体按照指定的对齐参数进行对齐?能否按照3、4、5即任意字节对齐?
(3)什么是大小端?如何测试某台机器是大端还是小端,有没有遇到过要考虑大小端的场景
【雾非雾】期待与你的下次相遇!预知后续如何精彩,请先关注+收藏!
相关文章:
探索C++面向对象:从抽象到实体的元规则(上篇)
前引:在计算机科学的浩瀚星空中,面向对象编程(OOP) 无疑是照亮现代软件开发的核心范式。而 C 作为一门兼具高性能与抽象能力的系统级语言,其类与对象的语法设计更是开发者构建复杂系统的“元规则”。你是否曾困惑于 封…...
华为鸿蒙电脑发布,企业运营效率可以提高吗?
今日,科技圈迎来重磅消息,华为于19日在成都正式发布两款鸿蒙电脑,标志着鸿蒙操作系统首次登陆电脑端,这是中国国产操作系统的重大里程碑,更是中国电子信息产业自主可控进程中的关键一步。 鸿蒙操作系统作为首个统一移动…...
遨游科普:三防平板是什么?应用在什么场景?
在数字化转型的浪潮中,智能终端设备正从消费级市场向工业级场景深度渗透。传统平板电脑虽能满足日常需求,却难以应对极端环境下的挑战——暴雨、沙尘、震动、高温或低温等恶劣条件,往往成为数据采集、实时通讯和作业效率的“绊脚石”。在此背…...
图像中紫边出现原因
一、紫边 在实景调试中,我们经常会遇到高亮场景下的物体边缘分布有明显的紫边(purple fringe)现象, 就如下图所示: 对于紫边的成因,通常认为是镜头色差(镜头对不同光谱光线的折射程度不同,导致不…...
中服云生产线自动化智能化调度生产系统:打造智能制造新标杆
前言 在当今制造业竞争日益激烈的背景下,实现生产线的自动化与智能化已成为企业提升竞争力的关键。作为国内技术领先的工业物联网平台、数字孪生、自动控制技术厂商,中服云凭借其深厚的技术积累和创新能力,打造了一套完整的生产线自动化智能…...
【电动汽车充电系统核心技术全解:从can通讯高压架构到800V超充未来】
标题:电动汽车充电系统核心技术全解:从高压架构到800V超充未来 目录 前言:开篇暴击:中国电动车年产670万辆背后,充电技术如何破局一、充电系统架构解剖:四大核心模块如何“打配合”?二、CAN总线…...
uniapp-商城-62-后台 商品列表(分类展示商品的布局)
每一个商品都有类别,比如水果,蔬菜,肉,粮油等等,另外每一个商品都有自己的属性,这些都在前面的章节进行了大量篇幅的介绍。这里我们终于完成了商品类的添加,商品的添加,现在到了该进…...
在嵌入式系统中, 一般链路层断开多久,断开TCP为好
一、典型场景与推荐策略 1. 实时性优先(工业控制、自动化设备) 需求:快速释放资源,避免因等待重传浪费内存或阻塞任务。 策略: 立即断开:在lwip_netif_link_callback中检测到链路断开后直接关闭TCP连接&a…...
解决 MySQL 错误 1356 (HY000)
当你遇到 ERROR 1356 (HY000): View mysql.user references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them 错误时,通常是由于 MariaDB 或 MySQL 版本更新导致的视图引用问题。 示例 UPDATE mysql.user SET H…...
【数据仓库面试题合集④】SQL 性能调优:面试高频场景 + 调优策略解析
随着业务数据规模的持续增长,SQL 查询的执行效率直接影响到数据平台的稳定性与数据产出效率。因此,在数据仓库类岗位的面试中,SQL 性能调优常被作为重点考察内容。 本篇将围绕常见 SQL 调优问题,结合实际经验,整理出高频面试题与答题参考,助你在面试中游刃有余。 🎯 高…...
机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征
机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 主…...
一个由微软开源的 Python 工具,用于将多种文件格式转换为 Markdown 格式
📚 Markitdown 由微软开源的 Python 工具,用于将多种文件格式转换为 Markdown 格式 支持:PDF、PowerPoint、Word、Excel、图像、音频、HTML、文本格式(CSV、JSON、XML)、ZIP 文件的转换。 它旨在提供一个简单且灵活的…...
Python多进程、多线程、协程典型示例解析
一、multiprocessing(多进程) 1. 模块简介 作用:创建多个独立运行的进程(每个进程有独立内存空间)适用场景:数学计算、图像处理等CPU密集型任务核心原理:绕过Python的GIL锁,真正利…...
httpx[http2] 和 httpx 的核心区别及使用场景如下
httpx[http2] 和 httpx 的核心区别在于 HTTP/2 协议支持,具体差异及使用场景如下: 1. 功能区别 命令/安装方式协议支持额外依赖适用场景pip install httpx仅 HTTP/1.1无通用请求,轻量依赖pip install httpx[http2]支持 HTTP/2需安装 h2>3…...
[强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程-下
[强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程-下 2.6 矩阵-向量形式2.7 求解状态值2.7.1 方法1:解析解2.7.2 方法2:数值解2.7.3 示例 2.8 动作值2.8.1 示例2.8.2 基于动作值的贝尔曼方程 本人为强化学习小白,为了在后续科研的过程…...
c/c++数据类型转换.
author: hjjdebug date: 2025年 05月 18日 星期日 20:28:52 CST descrip: c/c数据类型转换. 文章目录 1. 为什么需要类型转换?1.1 发生的时机:1.2 常见的发生转换的类型: 2. c语言的类型转换: (Type) value2.1 c语言的类型变换是如何实现的? 规则是什么? 3. c 的static_cast…...
大语言模型训练数据格式:Alpaca 和 ShareGPT
在大规模语言模型(LLM)的开发中,训练数据的质量和格式起着至关重要的作用。为了更好地理解和构建高质量的数据集,社区发展出了多种标准化的数据格式。其中,Alpaca 和 ShareGPT 是两种广泛使用的训练数据格式࿰…...
C++(23):容器类<vector>
目录 一、核心概念 二、基本语法 1. 头文件 2. 声明与初始化 三、常用操作 四、具体实例 1、size()、front()、back() 2、push_back()、pop_back()、capacity() 3、reserve() 一、核心概念 Vectors 包含着一系列连续存储的元素,其行为…...
Nginx配置中include mime.types的作用及正确配置mime类型
部署应用后发现页面没有正确加载CSS样式文件,通过检查nginx配置文件,发现nginx有一项配置include mime.type没有正确配置导致。 http {log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent &q…...
C++ 之 继承
1.继承的概念及定义 1.1继承的引入 我们设计一个person类,类中包含姓名、年龄、身高....等数据成员 我们再设计一个student类,类中也需要包含姓名、年龄、身高...等数据成员 我们再设计一个teacher类,类中也需要包含姓名、年龄、身高...等数…...
基于CNN的猫狗识别(自定义CNN模型)
目录 一,数据集介绍 1.1 数据集下载 1.2 数据集简介 二,模型训练 2.1 用到的模块 2.2 设置随机种子 2.3 图像的预处理 2.4 CNN模型层结构 2.5 初始化 2.6 训练和验证 三,模型测试 3.1 定义相同预处理 3.2 定义相同的层结构 3.3…...
互联网大厂Java面试场景:从Spring Boot到分布式缓存技术的探讨
互联网大厂Java面试场景:从Spring Boot到分布式缓存技术的探讨 场景描述 互联网大厂某次Java开发岗面试,主考官是一位严肃的技术专家,而应聘者则是搞笑的程序员“码农明哥”。面试围绕音视频场景的技术解决方案展开,探讨从Sprin…...
linux本地部署ollama+deepseek过程
1.Tags ollama/ollama GitHub 选择一个版本下载,我下的是0.5.12 2.tar解压该文件 3.尝试启动ollama ollama serve 4.查看ollama的版本 ollama -v 5.创建一个系统用户 ollama,不允许登录 shell,拥有一个主目录,并且用…...
【数据结构与算法】ArrayList 与顺序表的实现
目录 一、List 接口 1.1 List 接口的简单介绍 1.1 常用方法 二、顺序表 2.1 线性表的介绍 2.2 顺序表的介绍 2.3 顺序表的实现 2.3.1 前置条件:自定义异常 2.3.2 顺序表的初始化 2.3.2 顺序表的实现 三、ArrayList 实现类 3.1 ArrayList 的两种使用方式 3.2 Array…...
Vue 3.0 中的slot及使用场景
1. 基本概念 在 Vue 中, slot 用于定义组件中的插槽位置,外部的内容会被插入到组件内部的这个位置。插槽的内容是动态的,可以根据需要进行传递和渲染。它允许开发者在组件外部传递任意内容,并在组件内部进行渲染,主要…...
go语言协程调度器 GPM 模型
go语言协程调度器 GPM 模型 下面的文章将以几个问题展开,其中可能会有扩展处: 什么是调度器?为什么需要调度器? 多进程/多线程时cpu怎么工作? 进程/线程的数量多多少?太多行不行?为什么不行&…...
Python打卡 DAY 29
知识点回顾 1. 类的装饰器 2. 装饰器思想的进一步理解:外部修改、动态 3. 类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工…...
C++控制结构详解:if-else、switch、循环(for/while/do-while)
1. 引言 在C编程中,控制结构用于控制程序的执行流程。它们决定了代码在什么条件下执行、如何重复执行某段代码,以及如何选择不同的执行路径。C提供了多种控制结构,主要包括: 条件语句:if-else、switch-case循环语句&…...
APP手机端测试覆盖点
通过上图,我们覆盖了完整的一个APP,需要进行哪些测试...
C++:⾯向对象的三⼤特性
面向对象的三大特性: 继承:允许一个类(子类 / 派生类)继承另一个类(父类 / 基类)的属性和方法,实现代码复用和层次化设计。 封装:将数据(成员变量)和操作数据…...
三、高级攻击工具与框架
高级工具与框架是红队渗透的核心利器,能够实现自动化攻击、权限维持和隐蔽渗透。本节聚焦Metasploit、Cobalt Strike及企业级漏洞利用链,结合实战演示如何高效利用工具突破防御并控制目标。 1. Metasploit框架深度解析 定位:渗透测试的“瑞…...
玄机-第二章日志分析-redis应急响应
前言 记录记录 关于redis的一些手法 redis未授权访问漏洞利用redis写webshell利用“公私钥” 认证获取root权限利用crontab反弹shellredis日志: /var/log/redis.log 1. 通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交; cd /var/log 查看…...
MoodDrop:打造一款温柔的心情打卡单页应用
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念:我想做一款温柔的情绪应用 「今天的你,心情如何?」 有时候&#x…...
Web开发-JavaEE应用SpringBoot栈SnakeYaml反序列化链JARWAR构建打包
知识点: 1、安全开发-JavaEE-WAR&JAR打包&反编译 2、安全开发-JavaEE-SnakeYaml反序列化&链 一、演示案例-WEB开发-JavaEE-项目-SnakeYaml序列化 常见的创建的序列化和反序列化协议 • (已讲)JAVA内置的writeObject()/readObje…...
RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
视频讲解: RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍 今天测试下V2D,这是K1特有的硬件级别的2D图像加速器,参考如下文档,但文档中描述的部分有不少问题,后面会讲下 https://bianbu-linux.spa…...
学习!FastAPI
目录 FastAPI简介快速开始安装FastApiFastAPI CLI自动化文档 Reqeust路径参数Enum 类用于路径参数路径参数和数值校验 查询参数查询参数和字符串校验 请求体多个请求体参数嵌入单个请求体参数 CookieHeader表单文件直接使用请求 ResponseResponse Model多个关联模型 响应状态码…...
【Python 算法零基础 4.排序 ① 选择排序】
就算经历各番碰撞,幸运也将一直站在我这边 —— 25.5.18 一、引言 选择排序(Selection Sort) 是一种简单直观的排序算法。它首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小…...
05 部署Nginx反向代理
01 服务器基本信息 名称IP地址真实Web服务器172.2.25.10Proxy服务器172.2.25.11 02 Proxy基本设置 [rootlikexy-nginx-01 conf.d]# pwd /etc/nginx/conf.d [rootlikexy-nginx-01 conf.d]# cat proxy.conf server {listen 80;server_name www.wp.proxy.com;location / {prox…...
通俗解释Transformer在处理序列问题高效的原因(个人理解)
Transformer出现的背景 CNN 的全局关联缺陷卷积神经网络(CNN)通过多层堆叠扩大感受野,但在自然语言处理中存在本质局限: 局部操作的语义割裂:每个卷积核仅处理固定窗口(如 3-5 词),…...
【Vue】路由1——路由的引入 以及 路由的传参
目录 一、什么是路由 ! 1.1 一个完整的前端路由规则编辑 1.2 后端路由 1.3 安装路由插件 1.4 嵌套(多级)路由 二、路由的query传参 2.1 传参 2.2 取值 三、命名路由 四、 路由的params参数 五、路由的props配置 第一种写法&…...
大模型为什么学新忘旧(大模型为什么会有灾难性遗忘)?
字数:2500字 一、前言:当学霸变成“金鱼” 假设你班上有个学霸,数学考满分,英语拿第一,物理称霸全校。某天,他突然宣布:“我要全面发展!从今天起学打篮球!” 一周后&am…...
07 负载均衡
01 面试题 面试题: 说一下如何实现的负载均衡 1.使用的proxy_pass模块 2.通过proxy_pass模块转发给upstream模块定义的地址池 3.使用的是默认的rr轮训算法分发到后端的服务器02 负载均衡配置 # 写一个简单的配置 [rootlikexy-nginx-01 conf.d]# cat lb.conf server {listen …...
谢赛宁团队提出 BLIP3-o:融合自回归与扩散模型的统一多模态架构,开创CLIP特征驱动的图像理解与生成新范式
BLIP3-o 是一个统一的多模态模型,它将自回归模型的推理和指令遵循优势与扩散模型的生成能力相结合。与之前扩散 VAE 特征或原始像素的研究不同,BLIP3-o 扩散了语义丰富的CLIP 图像特征,从而为图像理解和生成构建了强大而高效的架构。 此外还…...
【深度学习】残差网络(ResNet)
如果按照李沐老师书上来,学完 VGG 后还有 NiN 和 GoogLeNet 要学,但是这两个我之前听都没听过,而且我看到我导师有发过 ResNet 相关的论文,就想跳过它们直接看后面的内容。 现在看来这不算是不踏实,因为李沐老师说如果…...
最新最热门的特征提取方式:CVOCA光学高速复值卷积
目录 一、问题背景与核心挑战 二、CVOCA核心原理与数学建模 1. 复杂值卷积的数学表达 2. CVOCA的三大光学映射策略 三、关键创新点详解 1. 合成波长技术(Synthetic Wavelength) 2. 复杂值电光调制器(CVEOM) 3. 时间-波长交织卷积计算 四、代码实现与仿真验证 1. …...
获取Class的方式有哪些?
在Java中,获取Class对象是进行反射操作的基础,以下是几种常见方式及其详细说明,以及记忆方法: 1. 使用 .class 语法 语法:类名.class(如 String.class)。特点: 编译时确定ÿ…...
STM32八股【9】-----volatile关键字
一句话: 主要是为了防止编译器优化导致无法得到最新的值。主要用于以下三处: 1.在中断中修改访问的变量。 2.多任务(线程)共享的变量。 3.硬件寄存器变量 问题 嵌入式程序中常出现变量值改变但代码未正确响应的现象 原因 编译…...
【android bluetooth 协议分析 01】【HCI 层介绍 4】【LeSetEventMask命令介绍】
在蓝牙协议栈中,HCI_LE_Set_Event_Mask 是一个主机控制接口(HCI)层的命令,属于 LE(Low Energy)控制指令集。该命令用于 配置控制器向主机报告哪些 LE 事件,以便主机能够根据需求控制被中断的事件…...
关于文件分片的介绍和应用
文件分片,顾名思义,就是将一个大文件分割成多个小的文件块(chunk)。每个文件块都是原始文件的一部分,并可以通过特定的方式将这些小文件块重新组装成原始文件。 1. 基本原理: 文件分片从底层来看,主要是对…...
tauri2项目动态添加 Sidecar可行性方案(运行时配置)
tauri2官方文档:Embedding External Binaries | Tauri Tauri 的 Sidecar 功能允许你将外部二进制文件(External Binaries)与你的 Tauri 应用程序捆绑在一起,并在运行时调用它们。根据你提供的链接和 Tauri 的文档,以下…...