《UE5_C++多人TPS完整教程》学习笔记35 ——《P36 武器类(Weapon Class)》

news2025/3/9 6:49:32

本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P36 武器类(Weapon Class)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephen Ulibarri 发布在 Udemy 上的课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。

在这里插入图片描述


文章目录

  • P36 武器类(Weapon Class)
  • 36.1 创建武器 C++ 类
  • 36.2 创建武器蓝图类
  • 36.3 将武器蓝图类添加到关卡中
  • 36.4 Summary


P36 武器类(Weapon Class)

本节课我们将添加武器类应有的基本组件,以及武器状态(Weapon state)的枚举,这样我们就可以根据武器状态来处理武器。
在这里插入图片描述


36.1 创建武器 C++ 类

  1. 在虚幻引擎内容浏览器 “C++ 类”(C++ Classes)目录下新建一个 “Actor” C++ 类,,命名为 “Weapon”,路径为“.../Blaster/Weapon”。
    在这里插入图片描述
    在这里插入图片描述

  2. 在 Visual Studio 中打开头文件 “Weapon.h”,在武器类私有属性中声明所有地方可见(VisibleAnywhere)、归类为武器属性 “Weapon Properties” 的骨骼体组件类(SkeletalMeshComponent) "WeaponMesh 以及球体组件类(SphereComponent) “AreaSphere”,该球体将 “包裹” 武器骨骼体组件,用于判定人物是否碰到球体,若碰到人物将会拾取该武器;在武器类外声明武器状态枚举类型,包括初始状态(武器可以被人物捡起)、已装备状态(武器被人物捡起并装备使用)、已丢弃状态(武器被人物丢弃)以及一个默认最大常量,添加武器状态枚举类型到武器类私有属性中。

    /*** Weapon.h ***/
    // Fill out your copyright notice in the Description page of Project Settings.
    
    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "Weapon.generated.h"
    
    /* P36 武器类(Weapon Class)*/
    // UENUM():参阅《元数据说明符》https://dev.epicgames.com/documentation/zh-cn/unreal-engine/metadata-specifiers-in-unreal-engine?application_version=5.0
    // BlueprintType:将此类公开为可用于蓝图中的变量的类型,参阅《类说明符》https://dev.epicgames.com/documentation/zh-cn/unreal-engine/class-specifiers?application_version=5.0
    UENUM(BlueprintType)									
    enum class EWeaponState : uint8							// 武器状态枚举类型,枚举常量为无符号8位整型						
    {	
    	// UMETA():参阅《元数据说明符》https://dev.epicgames.com/documentation/zh-cn/unreal-engine/metadata-specifiers-in-unreal-engine?application_version=5.0
    	EWS_Initial UMETA(DisplayName = "Initial State"),	// 初始状态,武器可以被人物捡起
    	EWS_Equipped UMETA(DisplayName = "Equipped"),		// 已装备状态,武器被人物捡起并装备使用
    	EWS_Dropped UMETA(DisplayName = "Dropped"),			// 已丢弃状态,武器被人物丢弃
    	EWS_Max UMETA(DisplayName = "DefaultMax")			// 大多数枚举常量都会有一个默认的最大常量,我们通过检查这个最大常量的值,就能知道枚举类型中有多少个常量
    };
    /* P36 武器类(Weapon Class)*/
    
    UCLASS()
    class BLASTER_API AWeapon : public AActor
    {
    	GENERATED_BODY()
    	
    public:	
    	// Sets default values for this actor's properties
    	AWeapon();
    
    protected:
    	// Called when the game starts or when spawned
    	virtual void BeginPlay() override;
    
    public:	
    	// Called every frame
    	virtual void Tick(float DeltaTime) override;
    
    /* P36 武器类(Weapon Class)*/
    private:
    	UPROPERTY(VisibleAnywhere, Category = "Weapon Properties")	// 添加所有地方可见的骨骼网格组件,这样就可以通过蓝图进行编辑武器,归类为 Weapon Properties
    	class USkeletalMeshComponent* WeaponMesh;				
    
    	UPROPERTY(VisibleAnywhere, Category = "Weapon Properties")	// 添加一个重叠体积(Overlap Volume),这里使用球体组件 “包裹” 武器骨骼体组件,用于判定人物是否碰到球体,若碰到人物将会拾取该武器
    	class USphereComponent* AreaSphere;
    
    	UPROPERTY(VisibleAnywhere)									// 添加新声明的武器状态枚举类型
    	EWeaponState WeaponState;									
    /* P36 武器类(Weapon Class)*/
    };
    

    注意:
    定义枚举类型使用了 “UENUM()” 和 “UMETA()”,具体用法参阅虚幻引擎官方文档《元数据说明符》,还使用了类说明符 “BlueprintType” 参阅《类说明符》https://dev.epicgames.com/documentation/zh-cn/unreal-engine/class-specifiers?application_version=5.0

  3. 打开源文件 “Weapon.cpp”,在 “Weapon” 类构造函数中 “AWeapon()”,将 “bReplicate” 变量设置为 “true” 实现武器类的网络同步,设置WeaponMesh 以及 “AreaSphere” 的碰撞响应预设值,接着设置关闭碰撞检测和碰撞响应,物体之间不会发生任何碰撞,然后在函数 “BeginPlay()” 中设置只在服务器再次启用 “AreaSphere” 的碰撞检测和碰撞响应,因为服务器负责掌管所有武器权限,若检测到发生碰撞事件会产生物理效果。最后进行编译。

    // Fill out your copyright notice in the Description page of Project Settings.
    
    /* P36 武器类(Weapon Class)*/
    #include "Weapon.h"	// 原来自动生成的代码是 #include "HUD/OverheadWidget.h",这里需要把 "GameMode/" 去掉,否则找不到文件 "LobbyGameMode.h"
    #include "Components//SphereComponent.h"
    
    // Sets default values
    AWeapon::AWeapon()
    {
    	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    	PrimaryActorTick.bCanEverTick = false;												// 设置为 false
    	
    	// 参阅《复制Actor属性》:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/replicate-actor-properties-in-unreal-engine?application_version=5.0
    	// 在多人Gameplay中,当属性被带有 Replicated 或 ReplicatedUsing 元数据说明符标记时,服务器会在复制的属性每次更改其值时向每个连接的客户端发送更新。每个客户端会将更新的值应用到其本地版本的Actor。
    	bReplicates = true;																	// 武器只在服务器拥有权限,需要复制到客户端上
    
    	WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMesh"));	// 基于骨骼网格体组件类创建 WeaponMesh 对象
    	SetRootComponent(WeaponMesh);														// 设置根组件为 WeaponMesh
    	WeaponMesh->SetupAttachment(RootComponent);											// 将 WeaponMesh 附加到武器类的根组件上
    	// SetRootComponent(WeaponMesh);													// 设置根组件为 WeaponMesh
    	WeaponMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);		// 设置所有通道(Channels)的碰撞响应(Collision response)为阻塞(Block)使得当武器被丢弃(Drop)时能被地面或墙体弹起(Bounce off)
    	WeaponMesh->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, 
    											ECollisionResponse::ECR_Ignore);			// 修改 Pawn 通道:当武器被玩家丢弃时,玩家可以跨过(Step over)跑过(Run through)落下的武器,不与它发生碰撞
    	WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);					// 先暂时关闭碰撞检测和碰撞响应,物体之间不会发生任何碰撞,我们将在服务器端启用
    	
    	/* ECollisionResponse
    	// Enum indicating how each type should respond 
    	UENUM(BlueprintType, meta = (ScriptName = "CollisionResponseType"))
    		enum ECollisionResponse
    	{
    		ECR_Ignore UMETA(DisplayName = "Ignore"),	// 忽略(Ignore):无论另一个物理形体的"碰撞响应(Collision Responses)"为何,此物理形体都将忽略交互。
    		ECR_Overlap UMETA(DisplayName = "Overlap"),	// 重叠(Overlap):如果已将另一个物理形体设置为"重叠(Overlap)"或"阻挡(Block)"此物理形体的"对象类型(Object Type)",将发生重叠事件。
    		ECR_Block UMETA(DisplayName = "Block"),		// 阻挡(Block):如果已将另一个物理形体设置为"阻挡(Block)"此物理形体的"对象类型(Object Type)",将发生撞击事件。
    		ECR_MAX,
    	};*/
    
    	/* // ECollisionChannel
    	// Enum indicating different type of objects for rigid - body collision purposes.
    	UENUM(BlueprintType)
    	enum ECollisionChannel
    	{
    		ECC_WorldStatic UMETA(DisplayName = "WorldStatic"),
    		ECC_WorldDynamic UMETA(DisplayName = "WorldDynamic"),
    		ECC_Pawn UMETA(DisplayName = "Pawn"),
    		ECC_Visibility UMETA(DisplayName = "Visibility", TraceQuery = "1"),
    		ECC_Camera UMETA(DisplayName = "Camera", TraceQuery = "1"),
    		ECC_PhysicsBody UMETA(DisplayName = "PhysicsBody"),
    		ECC_Vehicle UMETA(DisplayName = "Vehicle"),
    		ECC_Destructible UMETA(DisplayName = "Destructible"),
    
    		...
    	};*/
    	
    	/*	// ECollisionEnabled
    	// Enum used to describe what type of collision is enabled on a body.
    	UENUM(BlueprintType)
    		namespace ECollisionEnabled
    	{
    		enum Type
    		{
    			// Will not create any representation in the physics engine. Cannot be used for spatial queries (raycasts, sweeps, overlaps) or simulation (rigid body, constraints). Best performance possible (especially for moving objects) 
    			NoCollision UMETA(DisplayName = "No Collision"),	// 在物理引擎中此形体将不具有任何表示。不可用于空间查询(光线投射、Sweep、重叠)或模拟(刚体、约束)。此设置可提供最佳性能,尤其是对于移动对象
    			// Only used for spatial queries (raycasts, sweeps, and overlaps). Cannot be used for simulation (rigid body, constraints). Useful for character movement and things that do not need physical simulation. Performance gains by keeping data out of simulation tree. 
    			QueryOnly UMETA(DisplayName = "Query Only (No Physics Collision)"),	// 此形体仅可用于空间查询(光线投射、Sweep和重叠)。不可用于模拟(刚体、约束)。对于角色运动和不需要物理模拟的对象,此设置非常有用。通过缩小物理模拟树中的数据来实现一些性能提升
    			// Only used only for physics simulation (rigid body, constraints). Cannot be used for spatial queries (raycasts, sweeps, overlaps). Useful for jiggly bits on characters that do not need per bone detection. Performance gains by keeping data out of query tree 
    			PhysicsOnly UMETA(DisplayName = "Physics Only (No Query Collision)"),	// 此形体仅可用于物理模拟(刚体、约束)。不可用于空间查询(光线投射、Sweep、重叠)。对于角色上不需要按骨骼进行检测的模拟次级运动,此设置非常有用。通过缩小查询树中的数据来实现一些性能提升
    			// Can be used for both spatial queries (raycasts, sweeps, overlaps) and simulation (rigid body, constraints). 
    			QueryAndPhysics UMETA(DisplayName = "Collision Enabled (Query and Physics)")	// 此形体可用于空间查询(光线投射、Sweep、重叠)和模拟(刚体、约束)
    		};
    	}
    	*/
    
    	AreaSphere = CreateDefaultSubobject<USphereComponent>(TEXT("AreaSphere"));		// 基于球体组件类创建 AreaSphere 对象
    	AreaSphere->SetupAttachment(RootComponent);										// 将 AreaSphere 附加到武器类的根组件上
    	AreaSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);	// 忽略球体组件的碰撞响应,以便于当玩家靠近武器时我们可以检测玩家是否碰到武器(而不是武器被弹开)
    	AreaSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision);				// 先暂时关闭碰撞检测和碰撞响应,物体之间不会发生任何碰撞,我们将在服务器端启用
    }
    
    // Called when the game starts or when spawned
    void AWeapon::BeginPlay()
    {
    	Super::BeginPlay();
    	
    	// 服务器将负责掌管(in charge of)所有武器权限
    	if (HasAuthority()) {	// 判断是否拥有权威角色,等同于 if (GetLocalRole() == ENetRole::ROLE_Authority) 
    		AreaSphere->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);		// 既进行碰撞检测,也进行碰撞响应。物体之间会检测是否发生碰撞,同时会产生物理效果
    		AreaSphere->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, 
    												ECollisionResponse::ECR_Overlap);	// 
    	}
    }
    /* P36 武器类(Weapon Class)*/
    
    // Called every frame
    void AWeapon::Tick(float DeltaTime)
    {
    	Super::Tick(DeltaTime);
    }
    

    注意:
    代码中涉及的 “碰撞(Collision)“ 属性类别中的 “碰撞预设值(Collision Presets)”/“碰撞响应(Collision Response)” 可参阅虚幻引擎官方文《碰撞响应参考》


36.2 创建武器蓝图类

  1. 在虚幻引擎内容浏览器 “内容” 目录下的 “Blueprints” 文件夹中新建文件夹 “Weapon”,然后新建蓝图类 “BP_Weapon”,其父类为上文编译好的 C++ 类 “Weapon”。
    在这里插入图片描述

  2. 双击新建好的 “BP_Weapon”,进入蓝图编辑器。在左侧 “组件”(Components)面吧N选择 “Weapon Mesh (WeaponMesh)”,然后在右侧 “细节”(Details)面板中设置 “网格”(Mesh)选项卡下的 “骨骼网格体”(SkeletalMesh)为 “Assaults_Rifle_A”。
    在这里插入图片描述

  3. 在左侧 “组件”(Components)面板选择 “Area Sphere (AreaSphere)”,在视口中调整位置至 “Weapon Mesh (WeaponMesh)” 中心,调整大小直至可以恰好 “包裹” 组件 “Weapon Mesh (WeaponMesh)”。
    在这里插入图片描述
    在这里插入图片描述

  4. 在左侧 “组件”(Components)面板选择 “BP_Weapon (自我)” (BP_Weapon (Self)),可以在右侧 “细节”(Details)面板中 “Weapon” 选项卡下看到武器状态 “Weapon State” 为初始状态 “Initial State”。
    在这里插入图片描述


36.3 将武器蓝图类添加到关卡中

  1. 将蓝图类 “BP_Weapon” 拖拽至游戏关卡 “BlasterMap” 中。
    在这里插入图片描述

  2. 点击工具栏的 “播放”()按钮启动运行,可以看到武器均显示在监听服务器中和两个客户端中。
    在这里插入图片描述


36.4 Summary

本节课详细解析了多人射击游戏的武器类(Weapon Class)的构建。武器 C++ 类 “Weapon” 私有属性包含骨骼体组件类 "WeaponMesh” 、球体组件类 “AreaSphere”(该球体将 “包裹” 武器骨骼体组件,用于判定人物是否碰到球体,若碰到人物将会拾取该武器)以及在武器类外声明武器状态枚举类型(包括初始状态、已装备状态、已丢弃状态以及一个默认最大常量),然后我们利用 “bReplicates” 属性实现武器类服务器与客户端的同步,设置WeaponMesh 以及 “AreaSphere” 的碰撞响应预设值,接着设置关闭碰撞检测和碰撞响应,物体之间不会发生任何碰撞,然后设置只在服务器再次启用 “AreaSphere” 的碰撞检测和碰撞响应,因为服务器负责掌管所有武器权限,若检测到发生碰撞事件会产生物理效果。下一步我们由武器 C++ 类构建蓝图类 “BP_Weapon”,在蓝图编辑器中设置 "WeaponMesh” 的 “骨骼网格体” 为资产 “Assaults_Rifle_A”,然后调整球体组件类 “AreaSphere” 位置及大小。最后我们将 “BP_Weapon” 添加到游戏关卡 “BlasterMap” 中进行测试,在服务器和客户端上均可以看到武器。
在这里插入图片描述
36.1 创建武器 C++ 类 中,我们定义武器枚举类型使用了 “UENUM()” 和 “UMETA()”,它们的具体用法可参阅虚幻引擎官方文档《元数据说明符》,还使用了类说明符 “BlueprintType” 参阅《类说明符》。我们还设置了骨骼体组件类 "WeaponMesh” 、球体组件类 “AreaSphere”的碰撞预设值和碰撞响应,虚幻引擎的 “碰撞” 属性具体可参阅虚幻引擎官方文《碰撞响应参考》。


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

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

相关文章

[密码学实战]Java实现国密TLSv1.3单向认证

一、代码运行结果 1.1 运行环境 1.2 运行结果 1.3 项目架构 二、TLS 协议基础与国密背景 2.1 TLS 协议的核心作用 TLS(Transport Layer Security) 是保障网络通信安全的加密协议,位于 TCP/IP 协议栈的应用层和传输层之间,提供: • 数据机密性:通过对称加密算法(如 AE…

最小栈 _ _

一&#xff1a;题目 二&#xff1a;思路 解释&#xff1a;一个栈名为st&#xff0c;其用来正常的出入栈&#xff0c;一个栈名为minst&#xff0c;其的栈顶元素一定是最小的元素 入栈&#xff1a;第一个元素&#xff0c;两个栈一起入&#xff0c;后面再入栈&#xff0c;只有入栈…

HTTPS加密原理详解

目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议&#xff0c;是在HTTP的基础上加入了一个加密层&#xff0c;由…

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片&#xff0c;运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具&#xff0c;如基本参数调整、HSL&#xff08;色相、饱和度、明亮度&#xff09;调整、曲线工具等改变照片原本的色彩、明度、对比度等属性&#xff0c;将…

安装pyqt6出现的问题

安装PyQt6报错&#xff1a; PermissionError: [WinError 32] 另一个程序正在使用此文件&#xff0c;进程无法访问。: C:\\Users\\xyj19\\AppData\\Local\\Temp\\tmp3xfmekh7 [end of output] note: This error originates from a subprocess, and is likely not a pr…

java调用c++

VScode 配置java 并且使用JNA调用c 动态库 安装 Java 开发环境 ​ 安装 JDK官网直接下载就好&#xff0c;推荐镜像下载 通过网盘分享的文件&#xff1a;jdk-8u144-windows-x64.exe​ 链接: https://pan.baidu.com/s/1Ov9bJkPNnOgcliBL-PSTFQ?pwdpg43 提取码: pg43 ​ 直接安…

gitlab+jenkins+harbor+k8s安装操作流程之Jenkins

准备环境 一台centos7系统 4C/8G/100G 如果是jenkins2.5以上版本需要centos8以上版本 JDK1.8编译安装(最新版本jdk需要18以上) MAVEN编译安装 GIT编译安装 JDK1.8步骤 tar -zxvf 解压 vim /etc/profile export JAVA_HOME/data/jdk1.8.0_111 export JRE_HOME$JAVA…

【机械视觉】C#+VisionPro联合编程———【三、加载CogToolBlock工具详解,以及实例】

【机械视觉】C#VisionPro联合编程———【三、加载CogToolBlock工具详解&#xff0c;以及实例】 在VisionPro中&#xff0c;CogToolBlock 是一种容器工具&#xff0c;可以将多个视觉工具&#xff08;如CogBlob、CogPMAlign等&#xff09;组合成一个可复用的流程。通过C#与Visi…

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题&#xff1a;启动wsl里的Ubuntu24报错 报错信息&#xff1a; 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件&#xff0c;并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息&#xff0c;请访…

信息安全与网络安全的区别_信息安全与网络安全之差异探析

在当今数字化时代&#xff0c;信息安全与网络安全成为了人们关注的热点话题。尽管这两个概念经常被提及&#xff0c;但它们之间存在着明显的区别。本文旨在探讨信息安全与网络安全的定义、范畴及应对策略&#xff0c;以帮助读者更好地理解和应对相关挑战。 一、定义与范畴的差…

充电桩快速搭建springcloud(微服务)+前后端分离(vue),客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

充电桩管理系统是专为中小型充电桩运营商、企业和个人开发者设计的一套高效、灵活的管理平台。系统基于Spring Cloud微服务架构开发&#xff0c;采用模块化设计&#xff0c;支持单机部署与集群部署&#xff0c;能够根据业务需求动态扩展。系统前端使用uniapp框架&#xff0c;可…

设计AI芯片架构的入门 研究生入行数字芯片设计、验证的项目 opentitan

前言 这几年芯片设计行业在国内像坐过山车。时而高亢&#xff0c;时而低潮。最近又因为AI的热潮开始high起来。到底芯片行业的规律是如何&#xff1f; 我谈谈自己观点&#xff1a;芯片设计是“劳动密集型”行业。 “EDA和工具高度标准化和代工厂的工艺标准化之后&#xff0c;芯…

串口助手的C#编写以及有人串口服务器USR-DR301的使用

本文介绍C#编写串口程序的要点,串口服务器USR-DR301(RS232转TCP)的使用、以及调试过程中碰到的两个问题: 1). 调用串口报“连到系统上的设备没有发挥作用”. 2). “所有文本框都变成了透明”的异常处理 代码见:https://download.csdn.net/download/qq_34047402/9046713…

Android中AIDL和HIDL的区别

在Android中&#xff0c;AIDL&#xff08;Android Interface Definition Language&#xff09; 和 HIDL&#xff08;HAL Interface Definition Language&#xff09; 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC&#xff08;进程间通信&#xff0…

sqlserver删除表记录语句,及删除表时清零ID的SQL语句

sqlserver中&#xff0c;删除表中所有记录的语句如下 Delete from tableName 例&#xff0c;删除表logs的所有记录 sqlserver&#xff0c;删除表中所有数据&#xff0c;标识列ID归零&#xff0c;保留表结构的语句 truncate table tableName 例&#xff0c;删除表logs的所…

【瞎折腾/ragflow】构建docker镜像并部署使用ragflow

说在前面 操作系统&#xff1a;win11docker desktop版本&#xff1a;4.29.0docker engin版本&#xff1a;v26.0.0ragflow版本&#xff1a;nightly 安装docker 官网 如果是win11&#xff0c;backend建议使用wsl2 安装好后打开docker desktop&#xff0c;不然docker命令用不了 …

哈弗赛恩公式计算长度JavaScript实现

哈弗赛恩公式&#xff08;Haversine formula&#xff09;是一种用于计算球面上两点间最短距离的数学方法&#xff0c;尤其适用于地球表面。本文将详细介绍哈弗赛恩公式的原理、应用以及如何使用JavaScript实现它。 一、哈弗赛恩公式原理 在球面几何中&#xff0c;哈弗赛恩公式…

大模型赋能金融行业:从理念到落地实践

思维导图 引言 &#x1f31f; 随着人工智能技术的飞速发展&#xff0c;大模型正在重塑各行各业&#xff0c;金融领域尤为明显。本文将基于业内领先金融科技公司的实践经验&#xff0c;系统探讨大模型在金融行业的落地应用、面临的挑战以及未来的发展方向。从AI发展历程、能力边…

数据结构篇——串(String)

一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串&#xff08;s…

数据结构--【顺序表与链表】笔记

顺序表 template <class T> class arrList :public List<T> //表示 arrList 类以公有继承的方式继承自 List<T> 类 //公有继承意味着 List<T> 类的公共成员在 arrList 类中仍然是公共成员&#xff0c;受保护成员在 arrList 类中仍然是受保护成员。 { …