C++核心编程:类与对象全面解析
C++核心编程:类与对象全面解析
大家好!今天我要和大家深入探讨C++面向对象编程中最核心的概念:类与对象。👨💻 这是我们迈向高级C++开发的第一步,掌握好这部分内容,对未来学习更高级的设计模式和框架都至关重要!
📚 嵌入式开发爱好者必看:如果你对嵌入式开发感兴趣,我强烈推荐查看 FreeRTOS + STM32 学习资源库,里面包含从入门到精通的详细教程和实例代码!
📋 学习目标
- 理解类和类的成员的概念,掌握声明类的方法,以及由类定义对象的方法
- 初步掌握用类和对象编写基于对象的程序
- 学会检查和调试基于对象的程序
- 掌握类的构造函数和析构函数的定义
- 掌握对象数组、对象指针及其使用方法
- 掌握共用数据的保护方法
🔍 经典程序剖析
1. 构造函数与析构函数执行顺序分析
先阅读下面的程序,尝试预测运行结果,然后再验证:
#include <iostream>
using namespace std;
class A {
public:A() {cout << "Constructing A" << endl;}~A() {cout << "Destructing A" << endl;}
};class B {
public:B() {cout << "Constructing B" << endl;}~B() {cout << "Destructing B" << endl;}
};int main() {A a;B b;return 0;
}
代码分析:
- 这段程序展示了构造函数和析构函数的调用顺序
- 对象创建时,构造函数按照定义顺序执行(先A后B)
- 对象销毁时,析构函数按照与创建相反的顺序执行(先B后A)
- 这遵循了C++中"后进先出"的内存管理原则
🔥 实时系统编程提示:在嵌入式实时系统如FreeRTOS中,理解对象生命周期对于避免内存泄漏和系统崩溃至关重要。查看 FreeRTOS资源库 了解更多内存管理技巧!
2. 拷贝构造函数深入理解
#include<iostream>
using namespace std;class Test
{int x, y;
public:Test(int i, int j) {x = i; y = j; cout << "con\n"; }Test(Test &A) { x = A.x; y = A.y;cout << "copycon\n";}void show() {cout << "x=" << x << "\t y=" << y << endl; }
};int main()
{Test B1(2, 3); Test B2 = B1; Test B3(B1); B2.show(); B3.show();return 0;
}
代码分析:
- 这个例子展示了拷贝构造函数的两种调用方式
Test B1(2, 3)
调用普通构造函数Test B2 = B1
和Test B3(B1)
都调用拷贝构造函数- 拷贝构造函数用于创建一个新对象,该对象是现有对象的副本
- 注意拷贝构造函数的参数是引用类型,这是必须的,否则会导致无限递归
3. 对象数组与对象指针运用
#include <iostream>
using namespace std;class Sample {int x;
public:void setx(int i) {x = i; }int putx() {return x; }
};int main() {Sample *p; Sample A[3]; A[0].setx(5);A[1].setx(6);A[2].setx(7);for(int j=0; j<3; j++) { p = &A[j]; cout << p->putx() << " "; }cout << endl;return 0;
}
代码分析:
- 此程序展示了对象数组与对象指针的基本使用
Sample A[3]
创建了一个包含3个Sample对象的数组- 通过数组下标访问每个对象并设置其x成员
- 使用指针
p
依次指向数组中的每个对象 - 通过指针使用
->
运算符调用成员函数
💡 嵌入式开发技巧:在资源受限的嵌入式系统中,对象数组和指针操作的效率尤为重要。在 FreeRTOS项目 中有很多实际应用案例!
🛠️ 程序调试与优化
1. 构造函数声明修复
原代码存在问题,现已修正:
#include <iostream>
using namespace std; class A {int i;
public:A(int ii) { // 错误构造函数声明(void A→A)i = ii;}int geti() { return i;}
};int main() {A *pa; pa = new A(10); // 补充(int参数)cout << "i=" << pa->geti() << endl; return 0;
}
问题分析:
- 原代码中构造函数声明错误,使用了
void A
而非A
- 创建动态对象时缺少必要的构造函数参数
- 修正后,动态创建对象并正确初始化,输出结果为
i=10
2. 类成员访问修复
#include <iostream>
using namespace std; class base {int x, y;
public:int z;void Init(int a, int b) { setx(a);sety(b);}int getx() { return x; } int gety() { return y; } void setx(int a) { x = a; }void sety(int b) { y = b; }
}; int main() {base A, B; A.Init(76, 77); B.Init(78, 79); cout << "A.x=" << A.getx() << endl;cout << "B.x=" << B.getx() << endl;return 0;
}
问题分析:
- 原代码直接访问私有成员
x
和y
导致错误 - 修正后通过公有成员函数
getx()
访问私有成员 - 这展示了封装原则的重要性:私有成员只能通过公有接口访问
3. 解决作用域解析问题
#include <iostream>
using namespace std;class Time {
public:int hour, minute;void printTime(); void setHour(int h, int m) {hour = h; minute = m; }
}; void Time::printTime() { // 修正作用域解析cout << "hour: " << hour << "/minute: " << minute << endl; }int main() {Time aTime; aTime.setHour(5, 39); aTime.printTime(); // 未指定对象 → 补全aTime.return 0;
}
问题分析:
- 原代码中类外成员函数定义缺少作用域解析符
Time::
- 在
main()
中,成员函数调用缺少对象指定 - 修复后正确输出:
hour:5/minute:39
🔧 开发效率提升:良好的代码组织和作用域管理在复杂项目中尤为重要。查看 FreeRTOS项目 中的源码结构,学习专业的代码组织方式!
📝 程序填空题解析
1. 构造函数与访问器补全
#include<iostream>
using namespace std;
class a
{
private:int num;float f1;
public:a();a(int n, double f); // 填入参数类型 int n, double fint Getint(){return num;} // 返回类型为 intdouble Getdouble(){return f1;} // 返回类型为 double(float自动提升)
};a::a() // 类外构造函数定义
{cout<<"默认初始化"<<endl;num = 0; // 初始化整型成员f1 = 0.0; // 初始化浮点成员
}a::a(int n,double f)
{cout<<"初始化"<<endl;num=n;f1=f;
}int main()
{a x;a y(2,4.5);cout<<x.Getint()<<" "<<x.Getdouble()<<endl;cout<<y.Getint()<<" "<<y.Getdouble()<<endl;return 0 ;
}
填空解析:
- 参数构造函数声明:
a(int n, double f)
- 整型访问器返回类型:
int
- 浮点访问器返回类型:
double
- 默认构造函数定义:
a::a()
- 整型成员初始化:
num = 0
- 浮点成员初始化:
f1 = 0.0
2. 三角形计算类实现
#include <iostream> // 补全输入输出流头文件
#include <math.h>
using namespace std;
class A
{double a,b,c;
public:A (double,double,double);double fun1(); // 声明计算周长的成员函数double fun2(); // 声明计算面积的成员函数
};double A::fun1(){return a+b+c;}
A::A(double i,double j,double k)
{a=i;b=j;c=k;
}
double A::fun2()
{double d;d = (a+b+c) / 2.0;return sqrt(d*(d-a)*(d-b)*(d-c));
}int main()
{A a1(3,4,5);cout<<"三角形边长和:";cout << a1.fun1(); // 调用周长计算函数cout<<endl;cout<<"三角形面积:";cout << a1.fun2(); // 调用面积计算函数cout<<endl;return 0 ;
}
填空解析:
- 包含头文件:
#include <iostream>
- 周长计算函数声明:
double fun1();
- 面积计算函数声明:
double fun2();
- 输出周长:
cout << a1.fun1();
- 输出面积:
cout << a1.fun2();
📊 数学算法应用:像这样的几何计算在嵌入式系统中也很常见,特别是在传感器数据处理和位置计算中。FreeRTOS项目 中有许多实时数据处理的范例!
💻 实战编程挑战
1. 时钟类设计实现
#include <iostream>
#include <iomanip> // 用于格式化输出
using namespace std;class Clock {
private:int hour;int minute;int second;public:// (1) 构造函数:默认初始化00:00:00Clock() : hour(0), minute(0), second(0) {}// (1) 重载构造函数:指定时分秒Clock(int h, int m, int s) : hour(h), minute(m), second(s) {}// (2) 动态设置时间void setclock(int h, int m, int s) {hour = h;minute = m;second = s;}// (3) 格式化显示时间void showclock() {cout << setfill('0') // 不足两位补零<< setw(2) << hour << ":" << setw(2) << minute << ":" << setw(2) << second << endl;}
};int main() {Clock clock1; // 默认构造clock1.showclock(); // 输出 00:00:00clock1.setclock(12, 1, 1); // 动态设置时间clock1.showclock(); // 输出 12:01:01Clock clock2(13, 1, 1); // 指定参数构造clock2.showclock(); // 输出 13:01:01return 0;
}
实现重点:
- 使用私有数据成员保护时间数据
- 提供两种构造函数实现不同的初始化方式
- 使用
setfill
和setw
确保时间格式的标准化(两位数字,不足前补0) - 提供设置时间的公有接口,保持封装性
⏱️ 实时性提示:在实时系统中,时间管理至关重要。FreeRTOS提供了专门的时间管理函数和延时机制,详见 FreeRTOS资源库 中的时间管理部分!
2. 图书管理系统实现
#include <iostream>
#include <string>
using namespace std;class Book {
private:string bookname;double price;int number;public:// 构造函数初始化数据成员Book(string name, double p, int num) : bookname(name), price(p), number(num) {}void display() {cout << "书名:" << bookname << endl<< "价格:" << price << "元" << endl<< "库存:" << number << "本" << endl;}void borrow() {if(number > 0) {number--;cout << "借阅成功,当前库存:" << number << endl;} else {cout << "库存不足,无法借阅!" << endl;}}void restore() {number++;cout << "归还成功,当前库存:" << number << endl;}
};int main() {// 创建图书对象Book book1("C++", 23.5, 3);Book book2("Data Structure", 28.8, 7);// 操作book1cout << "----book1信息----" << endl;book1.display();book1.borrow();book1.borrow();book1.restore();// 操作book2cout << "\n----book2信息----" << endl;book2.restore(); book2.display(); return 0;
}
实现重点:
- 使用私有成员保存图书信息,体现封装原则
- 构造函数使用初始化列表高效初始化
borrow()
方法加入库存检查,防止出现负数库存- 清晰的UI设计使用户交互更直观
📚 系统设计拓展:这个简单的图书管理系统体现了面向对象编程的基本原则。在真实的嵌入式系统中,类似的资源管理更为复杂,需要考虑并发访问、资源锁定等问题。这些问题在 FreeRTOS项目 中有详细讲解和示例!
📌 总结与拓展
通过本文的学习,我们掌握了C++类与对象的核心概念:
- 类的定义与对象的创建
- 构造函数与析构函数的使用
- 拷贝构造函数的特性
- 对象数组与对象指针的操作
- 封装和数据保护
这些概念是深入理解C++的基础,也是进阶到更复杂系统设计的垫脚石。想更深入学习嵌入式开发和实时操作系统?请访问 Despacito0o的FreeRTOS学习资源库,那里有从入门到精通的全套资源!
🚀 学习建议:如果你掌握了本文的内容,推荐接下来学习C++的继承和多态特性,以及模板编程。这些高级特性将使你的代码更加灵活和强大!
相关文章:
C++核心编程:类与对象全面解析
C核心编程:类与对象全面解析 大家好!今天我要和大家深入探讨C面向对象编程中最核心的概念:类与对象。👨💻 这是我们迈向高级C开发的第一步,掌握好这部分内容,对未来学习更高级的设计模式和框…...
Linux基础命令和文件系统结构:从入门到实践
目录 1. 引言 2. Linux文件系统结构概述 2.1 根目录 编辑 2.2 常见目录介绍: 1. /home:用户的家目录 2. /etc:存放配置文件的目录 3. /var:可变数据 4. /bin 和 /sbin:常见命令和系统管理工具 5. /tmp&…...
「Mac畅玩AIGC与多模态05」部署篇03 - 在 Mac 上部署本地向量化模型(Embedding Models)
一、概述 本篇介绍如何在 macOS 环境下,为 Dify 平台部署本地向量化模型(Embedding Models),支持知识库文档向量化、语义检索与智能体上下文增强。向量化模型是实现知识库问答与 RAG(检索增强生成)应用的基础组件。 二、部署流程 1. 环境准备 确认 Docker Desktop 正常…...
Java-Optional类
介绍 Optional是 Java 8 引入的一个类,用于解决空指针异常问题。它本质上是一个容器类,可以包含或不包含一个非空值。 示例 创建Optional对象 Optional.of(T value):创建一个包含非空值的Optional对象。如传入null值,会抛出Nu…...
Android 热点开发调试总结
Android 热点开发调试总结 文章目录 Android 热点开发调试总结一、前言二、热点开发1、开关和默认配置wifi和热点配置信息保存的位置: 2、主要流程3、相关日志4、相关广播5、demo示例 三、其他1、Android 热点开发调试小结2、其他热点相关知识小结(1&…...
【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU
前言 随着大模型应用场景的不断拓展,arm cpu 凭借其独特优势在大模型推理领域的重要性日益凸显。它在性能、功耗、架构适配等多方面发挥关键作用,推动大模型在不同场景落地 1. CPU对比 星睿 O6 CPU 采用 Armv9 架构,集成了 Armv9 CPU 核心…...
快乐数(双指针解法)
题目链接202. 快乐数 - 力扣(LeetCode) 题目拆解 1 取一个正整数每一位的平方和为,如果为1那么直接可以判定为快乐数,如果不为1,就重复这个过程,直到出现1 2 实际上,这道题只有两种情况…...
【Vue3-Bug】中路由加载页面直接显示空白
Vue3中路由加载页面直接显示空白 没有子路由 路由定义不能重复,请自己查看数据在main.js(或者)mina.ts入口文件中,需要将router的注入到vue中的执行放在,vue挂在元素之前 // 顺序不能变 app.use(router) app.mount(#app)在App.vue中 // 在…...
线性代数——行列式⭐
目录 一、行列式的定义⭐ 1-1、三阶行列式练习 1-2、下面介绍下三角行列式、上三角行列式、对角行列式 编辑 二、行列式的性质 2-1、性质1,2,3,4,5,6 编辑 2-2、性质7 2- 3、拉普拉斯定理、克莱姆法则 三…...
flume----初步安装与配置
目录标题 **flume的简单介绍**⭐flume的**核心组件**⭐**核心特点** **安装部署**1)**解压安装包**2)**修改名字** **(配置文件时,更方便)****3)⭐⭐配置文件**4)**兼容Hadoop**5)**…...
vscode源代码管理Tab-文件右侧标志(M、A 等)的含义
Git 常用标志(M、A 等)的含义 在 VSCode 的源代码管理(Source Control)标签页中,文件右侧显示的 Monaco 装饰徽章(Badge)(如 M、A 等),本质上是对 Git 文件状态标志 的可视化呈现。…...
【力扣刷题实战】丢失的数字
大家好,我是小卡皮巴拉 文章目录 目录 力扣题目:丢失的数字 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页:小…...
具身智能机器人的应用场景及最新进展
具身智能机器人正通过“感知-学习-决策-行动”的闭环能力,重塑全球各行业的生产与服务模式。以下是其在当今世界的典型应用场景及最新进展: 一、工业制造:柔性生产与智能运维 高精度装配与检测 特斯拉Optimus通过双目视觉与惯性测量单元&…...
网络安全怎么入门?快速了解
网络安全是一个快速发展的领域,入门需要系统化的学习和实践。以下是适合零基础或转行者的分阶段学习路径,涵盖必备知识、学习资源、实战方法和职业方向: 一、基础阶段(1-3个月) 1. 掌握核心基础知识 计算机网络&#…...
STM32N6570-DK ISP调试
STM32N6570-DK之ISP调试应用 准备工作-下载安装软件包:一、使用STM32CubeProgrammer给板子烧入STM32N6_ISP_IQTune_App_revC01-v1.1.0-trusted.bin。二、打开STM32 ISP IQTune.exe ,出现可连接端口:三、根据教程进行相应调试:准备工作-下载安装软件包: https://www.st.co…...
Nacos源码—1.Nacos服务注册发现分析一
大纲 1.客户端如何发起服务注册 发送服务心跳 2.服务端如何处理客户端的服务注册请求 3.注册服务—如何实现高并发支撑上百万服务注册 4.内存注册表—如何处理注册表的高并发读写冲突 1.客户端如何发起服务注册 发送服务心跳 (1)Nacos客户端项目启动时为什么会自动注册服…...
NHANES指标推荐:CTI
文章题目:Association between the C-reactive protein-triglyceride-glucose index and endometriosis: a cross-sectional study using data from the national health and nutrition examination survey, 1996-2006 DOI:10.1186/s12905-024-03541-x 中…...
开源模型应用落地-全能音频新纪元-Kimi-Audio-7B-Instruct-重塑多模态交互边界
一、前言 在AI技术持续突破的2025年,音频交互正从单一任务处理迈向全场景融合的新阶段。4月27日,月之暗面(Moonshot AI)开源的Kimi-Audio-7B-Instruct,以“全能音频通才”之姿,为这一进程树立了里程碑式标杆。这款基于70亿参数架构的模型,首次在单一框架内整合语…...
mtrace和memleak源码分析
文章目录 1. 内存泄漏2. 定位工具2.1 memleak 工具定位内存泄漏2.1.1 源码解读 2.2 mtrace 工具定位内存泄漏2.2.1 源码解读 嵌入式内存泄漏定位工具mtrace和memleak源码分析 1. 内存泄漏 内存泄漏(Memory Leak)指程序中已动态分配的堆内存因未正确释放或…...
Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展) 文章目录 Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)前言:数据时代的爬虫使命第一章:Py…...
【网络入侵检测】基于源码分析Suricata的统计模块
【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 在 Suricata 的配置文件中,stats 节点用于配置统计信息相关的参数,它的主要作用是控制 Suricata 如何收集和输出统计数据,帮助用户了解 Suricata 的运行状态和…...
JDBC之Blob类型使用的实现
目录 一、 MySql Blob类型简介 1. Mysql中的Blob类型 2. Blob类型使用的注意事项 二. 插入Blob类型数据 1. 创建表 2. 通过PreparedStatement存储Blob类型数据 三. 解除文件大小限制 四、 读取Blob类型数据 前言 本文来讲解JDBC中的Blob类型 个人主页:艺杯羹…...
truffle
文章目录 truffle目录结构各文件作用在本地测试合约 truffle 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/04-web3js-truffle/README-CN.md Truffle 是基于 Solidity 语言的一套开发框架,它简化了去中心化应用(Dapp&…...
网盘不限速
引言 哈喽小伙伴们!说到网盘下载,是不是感觉心头一紧?特别是像某度那样不开会员就限速到怀疑人生!就连之前号称不限速的阿里云盘,现在也是限的死死的。 随着阿里网盘开始限速,很多小伙伴开始转战其他平台。…...
TVM中的Pass两种实现方法?如何选择?
以下是TVM中基于DFPatternCallback和VisitDFPattern两种编写Pass的方法的详细对比与示例总结: 1. 核心概念对比 特性DFPatternCallbackVisitDFPattern (DFPatternFunctor)抽象层级声明式模式匹配命令式访问者模式适用场景简单/中等复杂度的模式匹配需要精细控制匹配…...
JAVA EE_网络原理_UDP与TCP
人海中未遇见时,我将独自前行... ----------陳長生. 1.UDP协议 1.1.UDP协议端格式 UDP(用户数据报协议)是由 源端口,目标端口,长度,校验和,数据 5种结构组成。16位是UDP报文中字段的长度&#…...
智能Python开发工具PyCharm v2025.1——AI层级功能重磅升级
JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 立即获取PyCharm v2025.1正式版 具体更新内容: PyCh…...
15、项目搭建:绘制城堡蓝图——React 19 工程配置
一、魔法结界初始化 1. 召唤项目骨架 npx create-next-applatest hogwarts-castle --ts --tailwind 核心咒语: • --ts:激活预言水晶球(TypeScript类型安全) • --tailwind:注入飞天扫帚级原子样式(…...
docker搭建swarm集群
环境准备 主机名 IP 角色 manger1 192.168.111.47 管理节点 worker1 192.168.111.48 工作节点 worker2 192.168.111.49 工作节点 注:三台主机都已经拉去完swarm和…...
普通IT的股票交易成长史--20250428晚
声明:本文章的内容只是自己学习的总结,不构成投资建议。文中观点基本来自yt站Andylee,美股Alpha姐,综合自己的观点得出。感谢他的无私分享。 仓位就是生命,绝对不能满仓!!!…...
【React Native】精通 react native
活到老,学到老。 一、基础核心 JavaScript/TypeScript 基础 掌握 ES6+ 语法(箭头函数、解构、Promise、async/await)。熟悉 TypeScript(类型系统、接口、泛型)以提高代码质量。React 核心概念 组件化开发(函数组件、类组件)。状态管理(useState, useEffect, useContex…...
微信小程序-van-uploader的preview-size
preview-size支持数组格式 修改前修改后1、升级微信小程序里面的van版本:2、 重新构建npm3、重启微信开发工具 修改前 引用van组件的上传文件,设置预览图尺寸,刚开始设置的是preview-size“140”,出来的效果就是一个正方形。 修改后 1、升级…...
成员方法的详细说明(结合Oracle官方文档)
在Java的对象创建过程中,成员方法的地址并不存储在对象的堆内存中。Java虚拟机的设计说明(包括Oracle的Java虚拟机规范、OpenJDK文档、以及HotSpot的设计文档)都明确区分了对象的实例数据(存储在堆内存中)和类的元数据…...
[蓝桥杯刷题]---模拟法[2]日期问题
题目如下: 题目的意思是: 给出一个日期(格式是yy mm dd,注意年份只有两位数),要找出所有可能的真实日期(合法的yyyy-mm-dd格式)。 需要考虑: 年份范围在1960到2059。 输入的yy、mm、…...
阿里开源图生动画模型AnimateAnyone2
项目背景 近年来,基于扩散模型(diffusion models)的人物图像动画化方法取得了显著进展,例如 Animate Anyone 在生成一致性和泛化性方面表现优异。然而,这些方法在处理人物与环境之间的空间关系和人-物体交互࿰…...
02_使用 AES 算法实现文件加密上传至阿里云、解密下载
02_使用 AES 算法实现文件加密上传至阿里云、解密下载 一、文件上传下载接口 controller 层 RestController RequestMapping("/api/common/file") Api(tags "公共文件上传") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…...
Linux运维——Vim基础
Vim基础 一、移动光标1.1、基础移动1.2、屏幕滚动 二、编辑操作2.1、插入模式2.2、删除与修改2.3、复制粘贴 三、搜索与替换3.1、搜索3.2、替换 4、分屏与窗口管理4.1、分屏操作4.2、窗口调整 五、宏与批量操作六、效率技巧 一、移动光标 1.1、基础移动 快捷键作用h j k l左/…...
从外卖大战看O2O新趋势:上门私厨平台系统架构设计解析
京东高调进军外卖市场,美团全力防守,两大巨头的竞争让整个行业风起云涌。但在这场外卖大战之外,一个更具潜力的细分市场正在悄然兴起——上门私厨服务。 与标准化外卖不同,上门私厨提供的是个性化定制服务。厨师带着新鲜食材上门现…...
【网络编程】ARP协议与主机之间的通信
1. 什么是ARP协议? ARP(地址解析协议,Address Resolution Protocol) 是一种用于在网络中将IP地址转换为MAC地址的协议。它属于TCP/IP协议栈中的网络层协议,通常在局域网(LAN)环境下使用&#x…...
JVM模型、GC、OOM定位
JVM模型 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来…...
什么是数据链路层的CRC检测以及为什么要放到帧尾?
数据链路层在封装过程中添加CRC(循环冗余校验)帧尾,主要目的是为了检测数据传输过程中可能出现的比特错误,确保数据的完整性和可靠性。具体原因如下: 1. 错误检测 物理层传输的不可靠性:数据在物理介质&am…...
Electron 入门指南
Electron 入门指南 Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架。通过 Electron,你可以利用 Web 技术开发出功能强大的桌面应用程序,并且能够运行在 Windows、Mac 和 Linux 系统上。 本文将带你从零开始构建一个简单的 Ele…...
目标检测YOLO实战应用案例100讲- 无人机平台下露天目标检测与计数
目录 知识储备 基于YOLOv8改进的无人机露天目标检测与计数 一、环境配置与依赖安装 二、核心代码实现(带详细注释) 1. 改进YOLOv8模型定义(添加注意力机制) 2. 无人机视角数据增强(drone_augment.py ) 3. 多目标跟踪与计数(tracking_counter.py ) 4. 完整推理流…...
ArkTS基础实验 (二)
任务一:使用模板字符串相关知识,实现多个变量的拼接。同学们可以把自己的姓名、年纪和爱好这三个变量进行拼接。把代码和日志中console.log的打印结果截图保留。 预期效果: 任务二:使用状态变量和点击事件相关知识实现计数器案例…...
【计算机视觉】Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像
Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像 一、引言 在现代数码相机和手机摄像头中,我们能够拍摄到丰富多彩的彩色图像。然而,你可能不知道的是,图像传感器本身并不能直接感知颜色——它们只能感知光的强度。…...
媒体查询使用
一、引言 为了确保网页在不同设备上都能提供良好的用户体验,响应式设计变得至关重要。而媒体查询(Media Queries)就是前端开发中实现响应式设计的核心技术之一。 二、媒体查询的概念 媒体查询是 CSS3 引入的一项强大功能,它允许开…...
deepseek对IBM MQ SSL 证书算法的建议与解答
在IBM MQ配置SSL TLS的命令中,如果参数SSLCIPH使用TLS_RSA_WITH_AES_128_CBC_SHA256,如下所示: DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME(QM1.MACH.COM) XMITQ(QM2) SSLCIPH(TLS_RSA_WITH_AES_128_CBC_SHA256) DESCR(S…...
服务器文件同步工具有哪些?
服务器文件同步工具的选择取决于你的具体需求(如实时同步、单向/双向同步、跨平台支持、安全性等)。以下是几款主流的服务器文件同步工具推荐,适用于不同场景: 1. 实时同步工具(适合高频率、低延迟需求) rsync 特点:经典增量同步工具,支持本地/远程同步,高效节省带宽。…...
Numpy数组与矩阵——python学习
我前面提到过Numpy函数,但是不够全,在这里我顺便做一些补充。先说明一下我用的是Notebook。 一、数组的创建与操作 1、把列表转换为数组 np.array([1,2,3,4,5]) 2、把元组转换为数组 np.array((1,2,3,4,5)) 3、把range对象转换为数组 np.array(rang…...
CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南
文章目录 前言1. 添加镜像源2. 部署1Panel3. 本地访问测试4. 安装内网穿透工具5. 配置公网地址6. 配置固定公网地址 前言 很多时候在尝试远程管理服务器时,常常会遇到各种各样的麻烦,尤其是缺乏公网IP或者路由器设置过于复杂时,更是让人感到…...