当前位置: 首页 > news >正文

学习笔记十七——Rust 支持面向对象编程吗?

🧠 Rust 支持面向对象编程吗?

Rust 是一门多范式语言,主要以 安全、并发、函数式、系统级编程为核心目标,但它同时也支持面向对象的一些关键特性,比如:

特性传统 OOP(如 Java/C++)Rust 中是否支持Rust 中的实现方式
封装private/public 属性封装✅ 支持通过 pub 修饰符控制模块可见性
继承类可以继承父类❌ 不支持Rust 不支持类继承
多态虚函数 + 子类重写✅ 支持通过 Trait(特征)实现接口多态
抽象抽象类、接口✅ 支持使用 Trait 定义行为约定
方法调用对象.方法()✅ 支持结构体实现方法(impl)支持调用
动态分发虚表 vtable✅ 支持Box<dyn Trait> 实现运行时多态
构造器构造函数✅ 支持new 方法模拟构造函数

🚀 举例说明:Rust 是如何支持面向对象的?

✅ 1. 封装:结构体 + 模块可见性控制

mod user {pub struct User {pub name: String,    // 公开字段age: u32,            // 私有字段}impl User {pub fn new(name: String, age: u32) -> Self {Self { name, age }}pub fn age(&self) -> u32 {self.age}}
}fn main() {let u = user::User::new("Tom".to_string(), 30);println!("名字: {}", u.name);println!("年龄: {}", u.age()); // 注意:不能直接访问私有字段 age
}

通俗解释:Rust 没有 class,但通过 struct + impl 的组合,我们依然能做到封装数据 + 提供接口。


✅ 2. 多态:Trait(特征)+ 动态分发

trait Animal {fn speak(&self);
}struct Dog;
struct Cat;impl Animal for Dog {fn speak(&self) {println!("汪汪!");}
}impl Animal for Cat {fn speak(&self) {println!("喵喵!");}
}fn make_sound(animal: &dyn Animal) {animal.speak();
}fn main() {let dog = Dog;let cat = Cat;make_sound(&dog);  // 汪汪!make_sound(&cat);  // 喵喵!
}

通俗解释:Rust 用 trait 取代了传统语言中的“接口”和“虚函数”,&dyn Trait 表示运行时多态(类似 Java 中的多态调用)。


❌ 3. 不支持类继承,但支持 Trait 组合

Rust 明确放弃了“类继承”机制,防止复杂的继承体系导致维护困难。但它支持Trait 的组合使用,从而达到组合优于继承的设计理念。

trait Fly {fn fly(&self);
}trait Swim {fn swim(&self);
}struct Duck;impl Fly for Duck {fn fly(&self) {println!("鸭子飞!");}
}impl Swim for Duck {fn swim(&self) {println!("鸭子游!");}
}

Duck 同时实现了多个 trait,相当于同时“拥有”飞行和游泳能力,用组合替代继承。


🧩 总结:Rust 是面向对象的吗?

项目Rust 的情况
支持封装✅ 有模块系统和可见性控制
支持抽象✅ 有 trait 类似接口
支持多态✅ 静态和动态多态都支持
支持继承❌ 明确不支持类继承
语法是否类 OOP❌ 没有 class,语法更像函数式语言

所以可以这样说:

Rust 是一门“支持面向对象编程思想,但不强调传统 OOP 结构”的现代语言。它提倡组合优于继承,接口多态代替继承多态。

相关文章:

学习笔记十七——Rust 支持面向对象编程吗?

&#x1f9e0; Rust 支持面向对象编程吗&#xff1f; Rust 是一门多范式语言&#xff0c;主要以 安全、并发、函数式、系统级编程为核心目标&#xff0c;但它同时也支持面向对象的一些关键特性&#xff0c;比如&#xff1a; 特性传统 OOP&#xff08;如 Java/C&#xff09;Ru…...

图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化

图片来源&#xff1a;This is World 来源 | Z Potential Z Highlights&#xff1a; 新型的AI系统是以深度学习为基础&#xff0c;能够理解物理世界并且拥有记忆、推理和规划能力的。一旦成功构建这样的系统&#xff0c;它们可能会有类似情感的反应&#xff0c;但这些情感是基…...

Flink框架十大应用场景

Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…...

C++镌刻数据密码的树之铭文:二叉搜索树

文章目录 1.二叉搜索树的概念2.二叉搜索树的实现2.1 二叉搜索树的结构2.2 二叉搜索树的节点寻找2.2.1 非递归2.2.2 递归 2.3 二叉搜索树的插入2.3.1 非递归2.3.2 递归 2.4 二叉搜索树的删除2.4.1 非递归2.4.2 递归 2.5 二叉搜索树的拷贝 3.二叉树的应用希望读者们多多三连支持小…...

CAN与CANFD协议说明

在 CAN&#xff08;Controller Area Network&#xff0c;控制器局域网&#xff09;协议里&#xff0c;仲裁域波特率和数据域比特率有着不同的含义和作用&#xff0c;下面为你详细介绍并举例说明。 概念解释 仲裁域波特率 含义&#xff1a;仲裁域是 CAN 数据帧中的一部分&…...

【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是Qt中的第三章&#xff0c;也是我们理解Qt中必备的点 信号槽&#xff0c;它本质由信号和槽两个来实现&#xff0c;其中将细致的讲述如何自定义信号…...

【实战】在 Linux 上使用 Nginx 部署 Python Flask 应用

在 Linux 上使用 Nginx 部署 Python Flask 应用 步骤一&#xff1a;准备 Flask 应用 创建 Flask 应用 确保你有一个可以运行的 Flask 应用。例如&#xff0c;创建一个简单的 app.py 文件&#xff1a; from flask import Flask app Flask(__name__)app.route(/) def hello_wor…...

java ai 图像处理

Java AI 图像处理 图像处理是人工智能&#xff08;AI&#xff09;领域中非常重要的一个应用方向。通过使用Java编程语言和相应的库&#xff0c;我们可以实现各种图像处理任务&#xff0c;如图像识别、图像分类、图像分割等。本文将介绍一些常见的图像处理算法&#xff0c;并通过…...

【绘制图像轮廓】图像处理(OpenCV) -part7

15 绘制图像轮廓 15.1 什么是轮廓 轮廓是一系列相连的点组成的曲线&#xff0c;代表了物体的基本外形。相对于边缘&#xff0c;轮廓是连续的&#xff0c;边缘不一定连续&#xff0c;如下图所示。轮廓是一个闭合的、封闭的形状。 轮廓的作用&#xff1a; 形状分析 目标识别 …...

Mesh模型孔洞修补算法总汇

关于Mesh 孔洞修补算法&#xff08;Hole Filling in Meshes&#xff09;&#xff0c;这是计算几何和图形学中的一个重要话题&#xff0c;常用于重建、3D 扫描、建模等领域。下面我会系统总结主流和经典的孔洞修补方法&#xff0c;并按技术路线分类说明每种的原理、优缺点&#…...

ARINC818协议(六)

上图中&#xff0c;红色虚线上面为我们常用的simple mode简单模式&#xff0c;下面和上面的结合在一起&#xff0c;就形成了extended mode扩展模式。 ARINC818协议 container header容器头 ancillary data辅助数据 视频流 ADVB帧映射 FHCP传输协议 R_CTRL:路由控制routing ctr…...

RTMP握手流程

RTMP&#xff08;Real-Time Messaging Protocol&#xff09; 不支持除H.264/AAC之外的标准。 使用TCP,当到达网络拥塞、宽带上限时&#xff0c;传输质量受到影响。 URL格式&#xff1a; rtmp://host:port/app&#xff08;名称&#xff09;/stream&#xff08;流ID&#xff…...

【解决】torch引入过程中的ImportError: __nvJitLinkAddData_12_1, version libnvJitLink.so.12

大纲 本文记录在环境配置好后&#xff0c;在 import torch 过程中报了 异常 ImportError: /home/Coding/Envs/envs/only_test/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkAddData_12_1, version lib…...

面试招聘:新能源汽车研发测试人员需求内部研讨会纪要(2025年4月19日草稿流出)

标题&#xff1a;XX汽车技术中心技术管理岗闭门会议纪要完整版&#xff1a;双非招聘策略、面试话术与风控方案&#xff08;附待定事项&#xff09; 【内部密级文件】 时间&#xff1a;2025年4月15日 14:00-17:30 地点&#xff1a;某主机厂研发中心会议室&#xff08;305&#…...

从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理

Lucene.Net 是一个开源的全文搜索引擎库&#xff0c;它是 Apache Lucene 项目的 .NET 移植版本。Lucene.Net 提供了强大的搜索功能&#xff0c;广泛应用于文档搜索、日志分析、数据检索等场景。随着大数据的爆发&#xff0c;开发者越来越依赖高效的搜索引擎来实现复杂的搜索需求…...

opencv--图像处理

图像处理技术 图像处理技术是利用计算机对图像进行计算,分析和处理的技术,包括数字图像处理和计算机视觉两大领域。 对图像的处理包括滤波,缩放,分割,识别(两种信息对比)等。 链接 数字图像处理 1. 数字图像处理(Digital Image Processing) 数字图像处理主要关注图…...

JCST 2025年 区块链论文 录用汇总

Conference&#xff1a;Journal of Computer Science and Technology (JCST) CCF level&#xff1a;CCF B Categories&#xff1a;交叉/综合/新兴 Year&#xff1a;2025&#xff08;截止4.19&#xff09; JCST 2024年 区块链论文 录用汇总 1 Title: An Understandable Cro…...

股指期货跨期套利是如何赚取价差利润的?

股指期货跨期套利&#xff0c;简单来说&#xff0c;就是在同一交易所内&#xff0c;针对同一股指期货品种的不同交割月份合约进行的套利交易。投资者会同时买入某一月份的股指期货合约&#xff0c;并卖出另一月份的股指期货合约&#xff0c;待未来某个时间点&#xff0c;再将这…...

【java实现+4种变体完整例子】排序算法中【冒泡排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是冒泡排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、冒泡排序基础实现 原理 通过重复遍历数组&#xff0c;比较相邻元素并交换逆序对&#xff0c;逐步将最大值“冒泡”到数组末尾。 代码示例 pu…...

毕业论文超清pdf带标签导出

Word直接导出的pdf不够清晰&#xff0c;使用打印导出的pdf又不带书签以及目录跳转功能这一问题&#xff0c;查阅网上资料使用Adobe DC似乎能够解决但是下载安装比较麻烦&#xff0c;于是写了python程序解决该问题。 解决思路&#xff1a; 使用python脚本对两个pdf文件进行合并…...

STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.19 STM32开发板学习——第43节: [12-3] 读写备份寄存器&实时时钟 前言开发板说明…...

筛选法(埃氏筛法)C++

判断N个数是否质数 输入N个整数M&#xff0c;判断它们是否为质数。如果是输出“YES”&#xff0c;否则输出“NO”。&#xff08;1<n<10000&#xff09; 输入格式 第一行为N&#xff0c;第2&#xff5e;n1行每行为一个正整数M。&#xff08;1<M<1000000&#xff09;…...

PointCore——利用局部全局特征的高效无监督点云异常检测器论文与算法解读

概述 三维点云异常检测旨在从训练集中检测出异常数据点&#xff0c;是工业检测、自动驾驶等众多应用的基础。然而&#xff0c;现有的点云异常检测方法通常采用多个特征存储库来充分保留局部和全局特征表示&#xff0c;这带来了高昂的计算成本以及特征之间的不匹配问题。为解决…...

洛谷P1177【模板】排序:十种排序算法全解(1)

扯谈 之前我已经把十大排序算法全讲了一遍&#xff08;具体详见专栏C排序算法&#xff09;,今天我们来用一道简单的题目总结实战一下。 算法实现 一、桶排序&#xff08;Bucket Sort&#xff09; ‌适用场景‌&#xff1a;数据范围已知且较小&#xff08;需根据测试数据调整…...

Graham Scan算法求解二维凸包

一、凸包及其概念 凸包&#xff08;Convex Hull&#xff09;是计算几何中的一个重要概念。在一个实数向量空间中&#xff0c;对于给定的点集&#xff0c;凸包是指包含这些点的最小凸多边形。在二维平面上&#xff0c;凸包可以形象地理解为用一个橡皮圈将所有点紧紧包裹起来&am…...

【java实现+4种变体完整例子】排序算法中【希尔排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是希尔排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、希尔排序基础实现 原理 希尔排序是插入排序的改进版本&#xff0c;通过分步缩小增量间隔&#xff0c;将数组分成多个子序列进行插入排序&#…...

【文件操作与IO】详细解析文件操作与IO (二)

本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心…...

【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

基数排序详解及代码示例 基数排序原理 基数排序通过处理每一位数字进行排序&#xff0c;分为 LSD&#xff08;最低位优先&#xff09; 和 MSD&#xff08;最高位优先&#xff09; 两种方式。核心步骤&#xff1a; 确定最大值&#xff1a;计算数组中最大数的位数。逐位排序&am…...

Java中的函数式编程详解

Java中的函数式编程是一个在Java 8中引入的特性&#xff0c;它将计算视为数学函数的求值&#xff0c;避免使用可变状态和数据。其核心特性包括Lambda表达式、函数式接口和Stream API。以下将结合代码示例和具体场景详细讲解这些特性。 1. Lambda表达式 Lambda表达式是Java 8引…...

专精特新政策推动,B端UI设计如何赋能中小企业创新发展?

在当前数字化转型浪潮下&#xff0c;专精特新政策为中小企业提供了强大的支持&#xff0c;助力其在细分领域实现专业化、精细化、特色化和创新化发展。B端UI设计作为提升企业数字化产品用户体验和工作效率的重要手段&#xff0c;能够有效赋能中小企业创新发展。本文将探讨专精特…...

从零开始学A2A四:A2A 协议的高级应用与优化

A2A 协议的高级应用与优化 学习目标 掌握 A2A 高级功能 理解多用户支持机制掌握长期任务管理方法学习服务性能优化技巧 理解与 MCP 的差异 分析多智能体场景下的优势掌握不同场景的选择策略 第一部分&#xff1a;多用户支持机制 1. 用户隔离架构 #mermaid-svg-6SCFaVO4oDU…...

海关总署广东:广东外贸一季度进出口2.14万亿元 同期增长4.2%

大湾区经济网湾区财经报道&#xff0c;据海关总署广东分署统计&#xff0c;今年一季度&#xff0c;广东外贸进出口2.14万亿元&#xff0c;较去年同期&#xff08;下同&#xff09;增长4.2%&#xff0c;增速高于全国2.9个百分点。其中&#xff0c;出口1.34万亿元&#xff0c;增长…...

C++代码优化

前段时间写了一些代码&#xff0c;但是在运算过程中发现有些代码可以进行改进以提高运行效率&#xff0c;尤其是与PCL相关的部分&#xff0c;可以进行大幅度提高&#xff0e;特意在此进行记录&#xff0c;分享给大家&#xff0c;也供自己查看&#xff0e; pcl::PointCloud< …...

Manim教程:第七章 坐标系统

#什么是坐标系统?特点是什么? 坐标系统是一个用于确定空间中点位置的数学工具。它通过一组数值(坐标)来描述一个点在某个空间中的位置。不同类型的坐标系统可以用于不同的应用场景,最常见的包括: 笛卡尔坐标系:使用直角坐标系,通常用坐标轴(如x轴和y轴)来表示二维空间…...

U盘实现——双盘符实现

文章目录 双盘符实现描述符类特殊命名get max luninquiry上一篇文章中介绍了 U 盘的枚举过程 U盘实现——U 盘枚举过程 双盘符实现 描述符 双盘符的时候中,描述符的实现与上节完全一致,不同的只有类特殊命令 设备描述符配置描述符接口描述符输出端点描述符输入端点描述符上…...

【Linux】【阿里云服务器】【树莓派】学习守护进程编程、gdb调试原理和内网穿透信息

目录 一. 守护进程的含义及编程实现的主要过程 1.1守护进程 1.2编程实现的主要过程 二、在树莓派中通过三种方式创建守护进程 2.1nohup命令创建 2.2fork()函数创建 2.3daemon()函数创建 三、在阿里云中通过三种方式创建守护进程 3.1nohup命令创建 3.2fork()函数创建 …...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析

青少年软件编程(Python)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 老师要求大家记住四大名著的作者,小明机智地想到了可以用字典进行记录,以下哪个选项的字典格式是正确?( ) A. [‘曹雪芹’:‘红楼梦’, ‘吴承恩’:‘西游记’, ‘罗贯…...

【Linux系统篇】:System V IPC核心技术解析---从共享内存到消息队列与信号量

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 一.System V共享内存&#xff08;重点&#xff09;1.基本概念和原理…...

关于GPU的涡轮散热与被动散热

显卡涡轮散热与被动散热的深度解析 一、涡轮散热的定义与工作原理 涡轮散热技术是通过高速旋转的涡轮风扇配合封闭式风道设计,将冷空气吸入并强制排出热量的主动散热方案。其核心原理包含以下关键点: 气流动力学设计:涡轮风扇采用精密叶片(如离心式结构),在相同尺寸下能…...

namesapce、cgroup

dd&#xff1a; 制作磁盘镜像&#xff1a;借助 dd 指令能够把整个磁盘或者分区的数据复制到一个文件里&#xff0c;形成磁盘镜像文件。此镜像文件可用于备份数据或者在其他系统中恢复磁盘。 恢复磁盘镜像&#xff1a;可以把之前创建的磁盘镜像文件恢复到磁盘或者分区 磁盘初始…...

C++23 新特性:行拼接前去除空白符 (P2223R2)

文章目录 1\. 什么是行拼接前去除空白符2\. 为什么需要这一特性3\. 示例代码输出结果 4\. 编译器支持5\. 优势与应用场景5.1 提高代码可读性5.2 减少潜在错误5.3 适用于多行字符串 6\. 其他相关特性7\. 总结 C 语言一直在不断进化&#xff0c;以满足现代软件开发的需求。C23 标…...

算法思想之链表

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之链表 发布时间&#xff1a;2025.4.18 隶属专栏&#xff1a;算法 目录 算法介绍常用技巧 例题两数相加题目链接题目描述算法思路代码实现 两两交换链表中的节点题目链接题目描述算法思路代码实现 重排链表…...

《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试

目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例&#xff1a; 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例&#xff1a; 6. 调试与度量 真题示例&#xff1a; 1. 测试基础概念 定义&#xff1a;系统测试是为发现错误而执行程序的过程&…...

工厂方法模式详解及在自动驾驶场景代码示例(c++代码实现)

模式定义 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;通过定义抽象工厂接口将对象创建过程延迟到子类实现&#xff0c;实现对象创建与使用的解耦。该模式特别适合需要动态扩展产品类型的场景。 自动驾驶感知场景分析 自动驾…...

Java 2025:解锁未来5大技术趋势,Kotlin融合AI新篇

各位Java开发者们好&#xff01;&#x1f680; 2025年的Java世界正在经历一场前所未有的技术变革。作为深耕Java领域多年的技术博主&#xff0c;今天我将带大家深入探索Java生态即将迎来的5大技术趋势&#xff0c;特别是Kotlin的深度融合和AI技术的新篇章。准备好了吗&#xff…...

抗辐照设计优化:商业航天高可靠系统设计的关键路径

随着商业航天领域的快速发展&#xff0c;航天器的可靠性和抗辐照能力已成为系统设计的核心需求。在严苛的太空辐射环境中&#xff0c;电子设备面临着单粒子效应、总剂量效应和位移损伤效应等多重挑战。抗辐照设计优化不仅是确保航天器任务成功的关键路径&#xff0c;更是推动商…...

颚式破碎机的设计

一、引言 颚式破碎机作为矿山、建材等行业的重要破碎设备&#xff0c;其性能优劣直接影响物料破碎效率与质量。随着工业生产规模的扩大和对破碎效率要求的提高&#xff0c;设计一款高效、稳定、节能的颚式破碎机具有重要意义。 二、设计需求分析 处理能力&#xff1a;根据目…...

1panel第三方应用商店(本地商店)配置和使用

文章目录 引言资源网站实战操作说明 引言 1Panel 提供了一个应用提交开发环境&#xff0c;开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中&#xff0c;供其他用户使用。由此衍生了一种本地应用商店的概念&#xff0c;用户可以自行编写应用配置并上传到自…...

ObjectOutputStream 深度解析

ObjectOutputStream 深度解析 ObjectOutputStream 是 Java IO 体系中的一个关键类,用于序列化(将对象转换为字节流),通常与 ObjectInputStream 配合使用,实现对象的持久化存储或网络传输。 1.作用:完成对象的序列化过程 2.它可以将JVM当中的Java对象序列化到文件中/网…...

如何学习和研究量子计算与量子计算机:从理论到实践的完整路径

量子计算作为量子力学与计算机科学的交叉领域&#xff0c;正在迅速改变我们对计算能力的认知。无论是破解经典加密算法&#xff0c;还是加速药物分子模拟&#xff0c;量子计算都展现出巨大的潜力。然而&#xff0c;学习这一领域需要系统化的理论知识和实践能力。以下是基于最新…...