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

探索C++对象模型:(拷贝构造、运算符重载)成员函数的深度解读(中篇)

 

 

前引:在C++的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:拷贝复制、取地址重载成员函数。它们如同对象的“隐形守护者”,默默支撑着代码的健壮性与效率。本文将从技术底层出发,结合内存布局、编译器行为与实际案例,深入探讨 ~

目录

拷贝构造函数

语法讲解

拷贝构造函数写法

特点讲解(2)

特点讲解(3)

注意事项

运算符重载

函数引入

语法讲解

函数名的使用

成员函数

成员函数参数

拷贝构造函数与赋值运算重载函数对比

赋值运算重载多参的赋值顺序

默认调用运算符重载函数


拷贝构造函数

作用:用同类型的另一个对象初始化当前对象

特点(下面会根据编号对每个特点进行详细解释!):

           (1)拷贝构造函数是构造函数的一个重载形式

           (2)函数的参数只有一个,且必须是类类型对象的引用,使用传值将会报错,无限递归

           (3)若未显示定义,编译器会生成默认的拷贝构造函数(下面细说)

语法讲解
拷贝构造函数写法
class Mystruct
{
public://构造函数Mystruct(int year,int month,int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};

按照构造函数的特点:

(1)它属于构造函数的重载形式,因此函数名相同,没有返回值(不用写)

(2)它的参数只有一个,类类型对象的引用(即拷贝对象的引用)

int main()
{//生成St1对象Mystruct St1(1111, 11, 11);//拷贝构造生成St2对象Mystruct St2(St1);return 0;
}

这样我们就使用拷贝构造函数生成了与 St1 一模一样的对象:St2

但是这是拷贝,万一在使用拷贝构造函数时对模版误操作了,这样就得不偿失了,所以加上const

下面是完整拷贝构造函数的写法,功能自定义:

特点讲解(2)

我们怎么理解?

函数的参数必须是类类型对象的引用,使用传值将会报错,无限递归

这必须先知道:

拷贝的过程是先传参再对对象实现拷贝,这里就需要对类型拷贝的方式进行区分

(1)如果是内置类型:通过字节方式完成对实参的拷贝(也就是:形参是实参一份拷贝)

(2)如果是自定义类型:编译器会先调用拷贝函数实现拷贝,再去调用函数

例如:如果是内置类型直接拷贝

 例如:如果是自定义类型先调用拷贝构造函数实现拷贝,再去调用函数

因此,会出现一个行为:如果是自定义类型,按照形参是实参的一份拷贝,就会一直调用拷贝函数

 

解决办法是两种:(1)使用指针,直接传地址(2)使用引用,使用别名

所以上面我们使用引用和指针都是可以的额,但是引用更加的方便,这就是使用引用的原因!

特点讲解(3)

(1)当自定义了拷贝构造会调用自己设置的拷贝构造函数

(2)当没有自定义的拷贝构造,编译器会调用自己的拷贝构造

下面我们主要来看看调用编译器自己的拷贝构造会发生什么?

我们看到:当全是自定义类型时,会发生浅拷贝,也就是将内置类型的变量全部拷贝给另一个对象

那么如果既有内置类型又有自定义类型呢? 

我们可以看到:编译器还是会发生浅拷贝,内置类型、自定义类型都发生浅拷贝,且这个浅拷                                 贝连开辟空间的地址也一起拷贝过去两个对象的自定义类型成员共用一个空间 

那么如果后面再调用析构函数,对一个空间释放两次,这是何其危险的事情!所以我们得出结论:

(1)如果只有内置类型:可以借助编译器自己的拷贝构造完成

(2)如果有自定义类型,建议自己实现它的功能

(3)编译器自己的拷贝构造函数对自定义、内置类型都会操作

注意事项

(1)拷贝构造其实传的是两个参数,一个是 this 指针指向,一个是拷贝对象

(2)在类里面不受到访问限定符的限制,类的结构只是声明(相当于地图,对象是建筑的房子)

(3)如何利用拷贝构造函数对不同的对象进行不同的拷贝?

在上面我们已经看见了编译器调用自己拷贝构造的严重隐患!可以参考下面的设计!

例如将原有的 St1 数据拷贝给 St2 ,再在后面给 St2 增加数据(注意隐藏的 this 指针指向):

//生成St1对象
Mystruct St1(1111, 11, 11);
//拷贝构造
Mystruct St2(St1);

(4)注意调用拷贝构造时,不再调用构造函数,有开辟空间的自定义类型需要在拷贝构造完成 

运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似

函数名字:关键字 operator 后面接需要重载的运算符符号

函数原型:返回值类型 operator 操作符(参数列表)

函数引入

下面是一个日期类,为了方便,我们先把“私有”保护注释掉!

class Myclass
{
public:Myclass(int year, int month, int day){_year = year;_month = month;_day = day;}//private:int _year;int _month;int _day;
};

下面我们来写一个函数,用来比较日期:

Myclass St1(2025, 11, 11);
Myclass St2(2024, 11, 11);//比较日期
cout << Compare(St1, St2) << endl;
bool Compare(const Myclass St1, const Myclass St2)
{if (St1._year < St2._year){return false;}if (St1._year == St2._year && St1._month < St2._month){return false;}if (St1._year == St2._year && St1._month == St2._month && St1._day < St2._day){return false;}return true;
}

上面是一种普通的写法,今天我们学的运算符重载函数,可以简化函数名的表述!例如: 

语法讲解
函数名的使用

使用此特殊的成员函数,就是将原有的函数名换成关键字:operator + 重载的运算符符号

需要注意有5个运算符不支持重载(谨记):     .*      ::      sizeof      ?:       .

函数名和函数调用其实是一起改变的,只是函数调用可以缩写,只是第一种更直观。例如:

//二者等价
St1 < St2;
operator<(St1, St2);
成员函数

我们上面是在类外调用此函数的,如果我们换到类内会发生什么?

上面显示函数参数太多,我们只传了两个比较对象,为什么会发生报错?

 注意我们成员函数里面有一个隐藏的 this 指针,上面很明显它是没有指向的

this指针类的非静态成员函数中隐藏的指针,用于指向调用该函数的对象实例

                 谁调用成员函数,this 指针就指向谁 

 所以我们要将一个类对象交给 this 指针,那么函数的参数、函数调用都会发生变化,例如:

St1.operator<(St2);

这里是 St1 调用这个成员函数,所以 this 指针指向的 St1 

bool  operator<(const Myclass St2)
{if (_year < St2._year){return false;}if (_year == St2._year && _month < St2._month){return false;}if (_year == St2._year && _month == St2._month && _day < St2._day){return false;}return true;
}
成员函数参数

重载操作符必须有一个类类型参数

如果单单靠 this 指针是会报错的,这点大家记住即可!

拷贝构造函数与赋值运算重载函数对比

构造函数的实质:用一个已经存在实例化的对象去初始化+创造另一个实例化对象

运算重载函数实质:已经存在的两个对象之间的运算重载操作

例如:

	St1 < St2;//运算符重载函数Myclass St3(St2);//拷贝构造函数
赋值运算重载多参的赋值顺序

我们先来看看什么是多实参的比较:

int a = 10;
int b = 50;
//两个变量
a = b;

这是将 b 赋值给 a,注意先后顺序。如果是多个变量呢?

int c, d, e;
e = d = c = a;

先将 a 赋值给 c,再将 c 赋值给 d,以此类推!

同样在赋值重载也是如此,我们既然可以比较两个参数,也可以比较多个参数,例如:

//比较两个
St1 = St2;
//比较多个
St3 = St2 = St1;

此时我们成员函数功能变成了赋值运算,功能、返回值都需要改变

this 指针是指向调用成员函数的对象,因此我们需要返回 *this 

//运算符重载函数
Myclass  operator=(const Myclass St)
{_year = St._year;_month = St._month;_day = St._day;return *this;
}

 这里有一个注意点:我们返回整个类肯定是没有问题的,但是这样效率很低,如果这个类的空间很大呢?返回整个类就不那么好,因此我们可以返回对象的别名,也就是返回引用

//运算符重载函数
Myclass&  operator=(const Myclass St)
{_year = St._year;_month = St._month;_day = St._day;return *this;
}

为什么可以返回引用?

首先 this 的作用域是在成员函数里的,但是我们返回的不是 this ,而是 this 的指向对象:类对象

类对象也就是已经实例化的 St1、St2、St3这些,它们的作用域是全局的,因此不担心空间销毁!

默认调用运算符重载函数

如果我们没有写运算符重载函数,那么编译器会自己调用自己默认的成员函数

默认生成的赋值运算符重载 跟 拷贝构造的行为一样:

(1)内置类型成员发生值拷贝/浅拷贝

(2)自定义类型成员会去调用它的赋值重载

例如:对内置类型发生浅拷贝

例如:对自定义类型调用自己的赋值重载(改变自定义的地址)

 此时我们创建了2个实例化对象,它们自定义的类型地址不同:

但是调用编译器默认的赋值运算重载函数之后,改变了自定义的地址:

 

                                                 【雾非雾】期待与你的下次相遇!  

相关文章:

探索C++对象模型:(拷贝构造、运算符重载)成员函数的深度解读(中篇)

前引&#xff1a;在C的面向对象编程中&#xff0c;对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据&#xff0c;还是资源管理如何自动化&#xff0c;其底层机制均围绕两个关键概念展开&#xff1a;拷贝复制、取地址重载成员函数。它们如同对象的“隐形守护者”&…...

[逆向工程]C++实现DLL注入:原理、实现与防御全解析(二十五)

[逆向工程]C实现DLL注入&#xff1a;原理、实现与防御全解析&#xff08;二十五&#xff09; 引言 DLL注入&#xff08;DLL Injection&#xff09;是Windows系统下实现进程间通信、功能扩展、监控调试的核心技术之一。本文将从原理分析、代码实现、实战调试到防御方案&#x…...

gcc/g++常用参数

1.介绍 gcc用于编译c语言&#xff0c;g用于编译c 源代码生成可执行文件过程&#xff0c;预处理-编译-汇编-链接。https://zhuanlan.zhihu.com/p/476697014 2.常用参数说明 2.1编译过程控制 参数作用-oOutput&#xff0c;指定输出名字-cCompile&#xff0c;编译源文件生成对…...

51单片机课设基于GM65模块的二维码加条形码识别

系统组成 主控单元&#xff1a;51单片机&#xff08;如STC89C52&#xff09;作为核心控制器&#xff0c;协调各模块工作。 扫描模块&#xff1a;GM65条码扫描头&#xff0c;支持二维码/条形码识别&#xff0c;通过串口&#xff08;UART&#xff09;与单片机通信。 显示模块&a…...

物联网赋能7×24H无人值守共享自习室系统设计与实践!

随着"全民学习"浪潮的兴起&#xff0c;共享自习室市场也欣欣向荣&#xff0c;今天就带大家了解下在物联网的加持下&#xff0c;无人共享自习室系统的设计与实际方法。 一、物联网系统整体架构 1.1 系统分层设计 层级技术组成核心功能用户端微信小程序/H5预约选座、…...

基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化

深度学习在计算机视觉领域的快速发展推动了目标检测算法的持续进步。作为实时检测框架的典型代表&#xff0c;YOLO系列凭借其高效性与准确性备受关注。本文提出一种基于多头自注意力机制(Multi-Head Self-Attention, MHSA)增强的YOLOv11主干网络结构&#xff0c;旨在提升模型在…...

使用Spring Boot与Spring Security构建安全的RESTful API

使用Spring Boot与Spring Security构建安全的RESTful API 引言 在现代Web应用开发中&#xff0c;安全性是不可忽视的重要环节。Spring Boot和Spring Security作为Java生态中的主流框架&#xff0c;为开发者提供了强大的工具来构建安全的RESTful API。本文将详细介绍如何结合S…...

小刚说C语言刷题—1230蝴蝶结

1.题目描述 请输出 n 行的蝴蝶结的形状&#xff0c;n 一定是一个奇数&#xff01; 输入 一个整数 n &#xff0c;代表图形的行数&#xff01; 输出 n 行的图形。 样例 输入 9 输出 ***** **** *** ** * ** *** **** ***** 2.参考代码&#xff08;C语言版&#xff09…...

利用SenseGlove触觉手套开发XR手术训练体验

VirtualiSurg和VR触觉 作为领先的培训平台&#xff0c;VirtualiSurg自2017年以来一直利用扩展现实 (XR) 和触觉技术&#xff0c;为全球医疗保健行业提供个性化、数据驱动的学习解决方案。该平台赋能医疗专业人员进行协作式学习和培训&#xff0c;提升他们的技能&#xff0c;使…...

CT重建笔记(五)—2D平行束投影公式

写的又回去了&#xff0c;因为我发现我理解不够透彻&#xff0c;反正想到啥写啥&#xff0c;尽量保证内容质量好简洁易懂 2D平行束投影公式 p ( s , θ ) ∫ ∫ f ( x , y ) δ ( x c o s θ y s i n θ − s ) d x d y p(s,\theta)\int \int f(x,y)\delta(x cos\theta ysi…...

【Java】应对高并发的思路

在Java中应对高并发场景需要结合多方面的技术手段和设计模式&#xff0c;从线程管理、数据结构、同步机制到异步处理、IO优化等&#xff0c;都需要合理设计和配置。以下是Java在高并发场景下的主要应对策略和最佳实践&#xff1a; 1. 线程管理 1.1 线程池&#xff08;ThreadPo…...

从数据分析到数据可视化:揭开数据背后的故事

从数据分析到数据可视化:揭开数据背后的故事 大家好,今天咱们聊聊“从数据分析到数据可视化”的完整流程。说实话,数据分析和可视化这俩词听起来高大上,但咱们平时就是围绕这俩词打转——数据分析帮我们找故事,可视化则帮我们讲故事。没有它们,数据就是死的;有了它们,数…...

WPS JS宏实现去掉文档中的所有空行

WPS改造系列文章&#xff1a; 1.在WPS中通过JavaScript宏&#xff08;JSA&#xff09;调用本地DeepSeek API优化文档教程&#xff1a;在WPS中通过JavaScript宏&#xff08;JSA&#xff09;调用本地DeepSeek API优化文档教程_wps javascript-CSDN博客 2.在WPS中通过JavaScrip…...

【2025年软考中级】第一章1.6 安全性、可靠性、性能评价

文章目录 安全性、可靠性、性能评价计算机可靠性可靠性指标串并联系统可靠性并联系统可靠性N模元余系统 计算机系统性能评价信息安全加密技术对称&#xff08;私钥&#xff09;加密技术非对称加密技术&#xff08;公钥&#xff09;对称和非对称加密算法的区别数字信封原理数字签…...

MODBUS RTU通信协议详解与调试指南

一、MODBUS RTU简介 MODBUS RTU&#xff08;Remote Terminal Unit&#xff09;是一种基于串行通信&#xff08;RS-485/RS-232&#xff09;的工业标准协议&#xff0c;采用二进制数据格式&#xff0c;具有高效、可靠的特点&#xff0c;广泛应用于PLC、传感器、变频器等工业设备…...

【深度学习新浪潮】大模型时代,我们还需要学习传统机器学习么?

在大模型时代,AI 工程师仍需掌握传统机器学习知识,这不仅是技术互补的需求,更是应对复杂场景和职业发展的关键。以下从必要性和学习路径两方面展开分析: 一、传统机器学习在大模型时代的必要性 技术互补性 大模型(如GPT、BERT)擅长处理复杂语义和生成任务,但在数据量少…...

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中&#xff0c;安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将结合Spring Boot&#xff0c;详细介绍如何集成Spring Se…...

嵌入式学习笔记 - STM32 使用一个外部触发同时启动两个定时器

一个定时器是同时可以设置成主模式跟从模式的&#xff0c; 下面例子中&#xff0c; 一 TM1首先被配置为主模式&#xff0c; 通过MMS001&#xff1a;使能 – 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。见寄存器描述&#xff0c;此位默认为000&#xff0c;这时从模式状态…...

JWT令牌验证

一、JWT 验证方式详解 JWT&#xff08;JSON Web Token&#xff09;的验证核心是确保令牌未被篡改且符合业务规则&#xff0c;主要分为以下步骤&#xff1a; 1. 令牌解析与基础校验 收到客户端传递的 JWT 后&#xff0c;首先按 . 分割为三部分&#xff1a;Header、Payload、S…...

Go语言 GORM框架 使用指南

在 Go 语言社区中&#xff0c;数据库交互一直是开发者们关注的重点领域&#xff0c;不同开发者基于自身的需求和偏好&#xff0c;形成了两种主要的技术选型流派。一部分开发者钟情于像sqlx这类简洁的库&#xff0c;尽管其功能并非一应俱全&#xff0c;但它赋予开发者对 SQL 语句…...

c#车检车构客户管理系统软件车辆年审短信提醒软件

# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能&#xff1a;车辆年审前一个月给客户发年审短信提醒&#xf…...

匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创

Go 支持将函数当作值来使用&#xff0c;也允许定义匿名函数&#xff0c;并通过闭包实现对外部变量的捕获与持续访问。这一特性使函数式编程风格在 Go 中成为可能。 一、什么是匿名函数&#xff1f; 匿名函数是没有名字的函数&#xff0c;可以定义后立即调用&#xff0c;或赋值…...

兰亭妙微:用系统化思维重构智能座舱 UI 体验

兰亭妙微设计专注于以产品逻辑驱动的界面体验优化&#xff0c;服务领域覆盖AI交互、智能穿戴、IoT设备、智慧出行等多个技术密集型产业。我们倡导以“系统性设计”为方法论&#xff0c;在用户需求与技术边界之间找到最优解。 此次智能驾驶项目&#xff0c;我们为某车载平台提供…...

Flowbite 和 daisyUI 那个好用?

Flowbite 和 daisyUI 都是基于 Tailwind CSS 的组件库&#xff0c;它们各有特色&#xff0c;选哪个更好用&#xff0c;取决于你的项目需求和设计偏好。 简要结论 对比项daisyUIFlowbite上手难度简单&#xff0c;类名即组件略复杂&#xff08;多用 HTML 结构&#xff09;Vue 支…...

中间网络工程师知识点5

1.PKI证书主要用于确保主体公钥的合法性 2.VLAN帧的最小帧长是64字节,其中表示帧优先级的字是PRI 3.WIFI6是2.4GHZ和5GHZ频段的,理论吞吐量最高可达9.6Gbps,遵从协议802.11ax,支持完整版的MU-MIMO 4.在大型无线网络中,AP通过DHCP option43端口来获取AC的IP地址 5.项目…...

二、数据模型

二、数据模型 数据模型回顾 数据模型&#xff08;Data Model&#xff09; 是信息领域采用的模型将现实世界的各种事物以及事物之间的联系&#xff0c;表示为数据以及数据之间的联系是对现实世界数据特征的抽象和模拟用来描述数据、组织数据和操作数是数据库系统的核心和基础 …...

获取淘宝店铺所有商品信息接口数据指南

在电商运营和数据分析中&#xff0c;获取淘宝店铺的商品信息是常见的需求。淘宝开放平台提供了丰富的 API 接口&#xff0c;方便开发者获取商品的详细信息&#xff0c;包括商品列表、商品详情、销量等。本文将详细介绍如何从零开始获取淘宝店铺的所有商品信息&#xff0c;包括注…...

目标检测工作原理:从滑动窗口到Haar特征检测的完整实现

目标检测探索指南 &#x1f50d; 目标检测就像是一位细心的侦探&#xff01;我们需要在图像中寻找并定位特定的目标&#xff0c;就像侦探在现场搜寻线索一样。让我们一起来探索这个充满挑战的图像处理领域吧&#xff01; 目录 1. 什么是目标检测&#xff1f;2. 滑动窗口检测3.…...

【LUT技术专题】针对降噪优化的通道感知轻量级LUT算法:DnLUT

DnLUT&#xff1a;Ultra-Efficient Color Image Denoising via Channel-Aware Lookup&#xff08;2025 CVPR&#xff09; 专题介绍一、研究背景二、DnLUT方法2.1 Pairwise Channel Mixer2.2 Rotation Non-overlapping Kernel&#xff08;L型卷积&#xff09; 三、实验结果四、总…...

支持同步观看的媒体服务器GhostHub

简介 什么是 GhostHub &#xff1f; GhostHub 是一个基于滑动界面的媒体服务器&#xff0c;旨在实现实时同步、聊天和隧道分享。它允许用户快速共享和浏览媒体内容&#xff0c;无需复杂的配置或帐户。 主要特点 零配置: 即开即用&#xff0c;无需安装或创建帐户。滑动浏览: 提…...

告别 pip:使用 uv 加速你的 Python 包管理

使用 uv:更快的 Python 包管理工具 随着 Python 生态的演进,包管理工具也在不断升级迭代。uv 是 Astral(同样维护 ruff 的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip、pip-tools、pipx 与 virtualenv 等传统工具,…...

使用glsl 来做视频矫正

描述、优点 使用glsl来代替opencv的undistort 和 鱼眼矫正,并且最后使用opencv的LUT给glsl 来使用,来达到加速的目的,并且做到和opencv 一模一样的效果,达到实时视频的加速矫正。 优点: 没有cuda,也可以做到实时视频矫正,包含各类板子和amd的cpu,intel核显 矫正的基本作…...

【VSCode】快捷键合集(持续更新~)

一、基础编辑操作 注释/取消注释 Ctrl /&#xff1a;快速注释或取消注释当前行或选中行。ctrlshift/&#xff1a;块注释 代码格式化 • Shift Alt F&#xff1a;格式化整个文档&#xff0c;统一代码风格。 行操作 • Alt ↑/↓&#xff1a;向上/向下移动当前行。 • Shi…...

MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题

使用 MATLAB 对城市雨季防洪排污问题进行建模与仿真&#xff0c;需要结合数学模型、工程经验和 MATLAB 的数值计算、数据可视化及优化工具。以下是详细的步骤指南&#xff0c;包含实际案例和代码示例&#xff1a; 一、问题分析与建模框架 1. 问题拆解 • 核心目标&#xff1a; …...

由浮点数x的位级表示求其整型值

由浮点数x的位级表示&#xff0c;得到浮点数的十进制表示&#xff0c;在超过32位整型数的表示范围时&#xff0c;返回0X80000000&#xff1b;在32位整型数的表示范围内时&#xff0c;返回强制转化为整型的值。舍入时采用向0舍入。 程序代码 typedef unsigned long int float_…...

【Qt】Qt常见控件的相关知识点

1.close退出槽函数 2.设置快捷键&#xff0c;QMenu 。 适用&字母就能设置快捷键&#xff0c;运行qt程序&#xff0c;最后就可以按Alt对应的字母进行快捷操作。 3.QMenuBar内存泄露问题 如果ui已经自动生成了menubar&#xff0c;我们再次生成一个新的菜单栏&#xff0c;而…...

数据结构*优先级队列(堆)

什么是优先级队列(堆) 优先级队列一般通过堆&#xff08;Heap&#xff09;这种数据结构来实现&#xff0c;堆是一种特殊的完全二叉树&#xff0c;其每个节点都满足堆的性质。如下图所示就是一个堆&#xff1a; 堆的存储方式 由于堆是一棵完全二叉树&#xff0c;所以也满足二…...

Windows本地化部署Dify完整指南

Windows本地化部署Dify完整指南 作者&#xff1a;朱元禄 版权声明&#xff1a;本文为朱元禄原创文章&#xff0c;转载请注明出处及作者信息 关键词&#xff1a;Dify部署,Windows安装Dify,Dify本地化,Dify教程,Dify配置,朱元禄 一、Docker Desktop安装与配置 1.1 下载Docker De…...

全局异常处理:如何优雅地统一管理业务异常

在软件开发中&#xff0c;异常处理是保证系统健壮性的重要环节。一个良好的异常处理机制不仅能提高代码的可维护性&#xff0c;还能为使用者提供清晰的错误反馈。本文将介绍如何通过全局异常处理和业务异常统一处理来编写更加优雅的代码。 一、传统异常处理的痛点 1.1 典型问…...

AI517 AI本地部署 docker微调(失败)

本地部署AI 计划使用OLLAMA进行本地部署 修改DNS 访问github 刷新缓存 配置环境变量 OLLAMA安装成功 部署成功 计划使用docker进行微调 下载安装docker 虚拟化已开启 开启上面这些 准备下载ubuntu docker ragflow dify 用git去泡...

C++(初阶)(十八)——AVL树

AVL树 AVL树概念实现AVL树的结点插入插入方法 平衡因子更新更新停止条件旋转右单旋左单旋左右双旋右左双旋 遍历AVL平衡检测 完整代码 概念 1&#xff0c;AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL树是⼀颗⾼度平衡搜索⼆叉树&#xff0c; 通过控制高度差去控制平衡。…...

2022河南CCPC(前四题)

签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…...

【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数

将 x 减到 0 的最小操作数 一、题目链接二、题目三、题目解析四、算法原理五、编写代码六、时空复杂度 一、题目链接 将 x 减到 0 的最小操作数 二、题目 三、题目解析 以示例1为例&#xff1a; 四、算法原理 像"题目解析"中正面删除并修改数组元素的操作太困难&…...

电机试验平台:创新科技推动电动机研究发展

电机试验平台是电机制造和研发过程中不可或缺的重要设备&#xff0c;其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大&#xff0c;对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...

linux-软件的安装与部署、web应用部署到阿里云

一、软件安装方式概述 CentOS安装软件的方式主要包括&#xff1a; - 源码安装 - rpm安装&#xff08;二进制安装&#xff09; - yum安装&#xff08;在线安装&#xff09; 1.源码安装&#xff1a; 源码包是指C等语言所开发的源代码文件的一个压缩包&#xff0c;通常压缩为.…...

Qt Widgets模块功能详细说明,基本控件:QLabel(一)

一、基本控件&#xff08;Widgets&#xff09; Qt 提供了丰富的基本控件&#xff0c;如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QLabel 1.1、概述 (用途、继承关系) QLabel 是 Qt 框架中用于显示文本、图像或动画的控件&#xff0c;属…...

Ubuntu 安装 squid

1. 安装Squid及工具 Debian/Ubuntu sudo apt update sudo apt install squid apache2-utils CentOS/RHEL sudo yum install squid httpd-tools 2. 创建用户名密码文件 创建密码文件&#xff08;首次使用 -c 参数&#xff0c;后续添加用户省略&#xff09; sudo htpasswd…...

中药药效成分群的合成生物学研究进展-文献精读130

Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝&#xff0c;也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种&#xf…...

芯片生态链深度解析(三):芯片设计篇——数字文明的造物主战争

【开篇&#xff1a;设计——数字文明的“造物主战场”】 当英伟达的H100芯片以576TB/s显存带宽重构AI算力边界&#xff0c;当阿里平头哥倚天710以RISC-V架构实现性能对标ARM的突破&#xff0c;这场围绕芯片设计的全球竞赛早已超越技术本身&#xff0c;成为算法、架构与生态标准…...

Echart地图数据源获取

DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...