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

类设计者的核查表

核查表

  • 第一篇 如何设计类
    • 你的类需要复制构造函数吗
      • 何时不需要自定义复制构造函数
      • 何时需要自定义复制构造函数
      • 总结
    • 什么时候需要将构造函数和赋值运算符设置为私有?
      • 1. 单例模式(Singleton Pattern)
      • 2. 禁止复制和赋值
      • 3. 工厂模式(Factory Pattern)
      • 4. 实现某些设计模式
      • 5. 限制类的实例化
      • 总结
    • 如果函数有引用参数,他们应该是const引用吗
      • 什么时候使用非const引用
      • 左值与右值的概念
        • 1. 传递大型对象(如类实例)
        • 2. 传递基本数据类型(如 int、float 等)
        • 3. **需要修改对象的情况**
      • 什么使用const引用

第一篇 如何设计类

你的类需要复制构造函数吗

在 C++ 中,如果一个类的对象只包含基本数据类型或其他具有合理复制构造函数的成员类型,并且没有动态分配的资源(如动态数组、指针等),那么这个类通常不需要自定义复制构造函数。此时,编译器生成的默认复制构造函数就足够了。

何时不需要自定义复制构造函数

  1. 只包含基本数据类型
    如果类只包含基本数据类型(如 intfloatchar 等),那么默认的复制构造函数会按值复制这些成员,通常没有问题。

    class SimpleClass {
    public:SimpleClass(int a, float b) : a(a), b(b) {}// 不需要自定义复制构造函数
    private:int a;float b;
    };
    
  2. 包含其他类的对象
    如果类的成员是其他类的对象,并且这些类也定义了合理的复制构造函数(通常是自动生成的),那么同样不需要自定义复制构造函数。

    class MemberClass {
    public:MemberClass(int x) : x(x) {}
    private:int x;
    };class MyClass {
    public:MyClass(int a, int b) : member(b) {} // member 会调用 MemberClass 的复制构造函数
    private:int a;MemberClass member;
    };
    
  3. 没有动态分配的资源
    如果类不管理动态分配的资源(例如,使用 new 分配内存),则可以依赖默认的复制构造函数。

何时需要自定义复制构造函数

如果类的成员中有以下情况之一,则需要自定义复制构造函数:

  1. 动态分配的资源
    如果类管理动态分配的内存或其他资源,则需要提供自定义的复制构造函数,以确保进行深拷贝,避免多个对象共享同一资源。
    一个类在构造函数内申请资源,则可能需要一个显示的复制构造函数来管理资源以及一个析构函数来释放构造函数分配的资源

    class MyClass {
    public:MyClass(int size) : size(size) {data = new int[size];}// 自定义复制构造函数MyClass(const MyClass& other) {size = other.size;data = new int[size]; // 深拷贝std::copy(other.data, other.data + size, data);}~MyClass() {delete[] data; // 释放内存}private:int* data;int size;
    };
    
  2. 需要特定的复制逻辑
    如果在复制过程中需要执行特定的逻辑(如更新计数、记录日志等),也需要自定义复制构造函数。

总结

如果一个类的对象只包含基本数据类型和其他具有合理复制构造函数的成员类型,并且不管理任何动态资源,那么就可以依赖编译器生成的默认复制构造函数,无需自定义。然而,一旦涉及到动态资源管理或需要特殊的复制逻辑,就必须提供自定义的复制构造函数。

什么时候需要将构造函数和赋值运算符设置为私有?

在 C++ 中,将构造函数和赋值运算符设为私有的情况通常与以下几种设计模式和需求相关:

1. 单例模式(Singleton Pattern)

在单例模式中,类的目的是保证只有一个实例存在。为了防止外部代码创建多个实例,构造函数和赋值运算符通常被设为私有,并提供一个公共的静态方法来获取该类的唯一实例。

class Singleton {
public:static Singleton& getInstance() {static Singleton instance; // 线程安全的静态局部变量return instance;}// 禁止复制和赋值Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {} // 私有构造函数
};

2. 禁止复制和赋值

在某些情况下,类的设计可能不希望其对象被复制或赋值。例如,管理独占资源的类(如文件句柄、网络连接等)通常会将复制构造函数和赋值运算符设为私有或删除,这样可以避免不必要的资源共享和潜在的错误。

class UniqueResource {
public:UniqueResource() {// 资源初始化}// 禁止复制和赋值UniqueResource(const UniqueResource&) = delete;UniqueResource& operator=(const UniqueResource&) = delete;// 其他成员函数...private:// 资源数据
};

3. 工厂模式(Factory Pattern)

在工厂模式中,构造函数可能被设为私有,以强制使用工厂方法生成对象。这种情况下,类的实例化过程被封装在工厂类中,从而控制对象的创建和生命周期。

class Product {
public:// 工厂方法static Product* createProduct() {return new Product(); // 在工厂方法中创建实例}private:Product() {} // 私有构造函数
};

4. 实现某些设计模式

某些设计模式(如代理模式、适配器模式等)可能需要将构造函数和赋值运算符设为私有,以控制对象的创建和管理。

5. 限制类的实例化

在某些情况下,类可能只需要在某个特定上下文中被实例化。例如,某些库可能需要限制用户直接创建类的实例,以确保类的使用符合特定的逻辑或状态。

总结

将构造函数和赋值运算符设为私有通常用于:

  • 单例模式:确保类只有一个实例。
  • 禁止复制和赋值:防止不必要的资源共享和潜在的错误。
  • 工厂模式:通过工厂方法控制对象的创建。
  • 实现某些设计模式:如代理模式、适配器模式等。
  • 限制类的实例化:确保类的使用符合特定的逻辑或状态。

通过这种方式,类的设计者可以更好地控制类的使用和实例化,确保资源的正确管理和避免潜在的错误。

如果函数有引用参数,他们应该是const引用吗

什么时候使用非const引用

No1. 如果要在函数的内部修改引用的值是不要加const的

	Complex operator+(Complex& other) const {// 假设我们希望在这里修改 x 和 y 的值this.real += 1; // 修改 x 的实部other.imag += 1; // 修改 y 的虚部return Complex(this.real+ other.real, this.imag + other.imag);}

但是通常情况下是没有这种需求的,而且这种用法不支持连续加法(a+b+c),因为前面两个对象相加(a+b)产生的临时对象是不能赋值给非const引用的对象的所以只能适用于自定义二元加法运算。所以对于加法运算符一般采用const引用

左值与右值的概念

  • 左值(lvalue):可以被赋值的对象,具有持久的内存地址。例如,变量、数组元素等。
  • 右值(rvalue):临时对象,没有持久的内存地址,通常是表达式的结果。比如 x + y 的结果是一个临时的 Complex 对象。
1. 传递大型对象(如类实例)

当函数需要传递大型对象(例如,用户自定义的类或结构体),使用 const 引用是一个很好的选择,以避免不必要的复制开销,同时又能保证函数不会修改传入的对象。例如:

class LargeObject {// 具体实现
};void processObject(const LargeObject& obj) {// 处理 obj,但不修改它
}

在这种情况下,使用 const 引用可以提高性能,并确保安全性。

2. 传递基本数据类型(如 int、float 等)

对于基本数据类型(如 intfloat 等),通常不需要使用引用,因为它们的大小相对较小,直接传值更简单,且不会有性能损失。因此,以下写法更常见:

void processInt(int value) {// 处理 value
}

当然,如果你希望函数能够修改传入的值,可以使用非 const 引用:

void modifyInt(int& value) {value += 10; // 修改传入的值
}
3. 需要修改对象的情况

如果函数需要修改传入的对象,则应使用非 const 引用。例如:

void modifyObject(LargeObject& obj) {// 修改 obj
}

什么使用const引用

 // 重载加法运算符Complex operator+(const Complex& other) const {return Complex(real + other.real, imag + other.imag);}

测试程序

#include <iostream>class Complex {
public:Complex(double real = 0.0, double imag = 0.0) : real(real), imag(imag) {}// 重载加法运算符Complex operator+(const Complex& other) const {return Complex(real + other.real, imag + other.imag);}void print() const {std::cout << real << " + " << imag << "i" << std::endl;}private:double real;double imag;
};int main() {Complex c1(1.0, 2.0);Complex c2(3.0, 4.0);Complex c3 = c1 + c2; // 使用重载的 + 运算符c3.print(); // 输出: 4.0 + 6.0iComplex a(3.0, 4.0);Complex b(3.0, 4.0);Complex c(3.0, 4.0);Complex sum = a+b+c;//正确return 0;
}

最后解释一下两个参数的加法运算符,这种适合z=a+b,同样不适合连续加法(a+b+c)因为参数不对。

Complex operator+(const Complex& x, const Complex& y) {return Complex(x.real + y.real, x.imag + y.imag);
}

并且这种方法不能放在类内声明, “此运算符函数的参数太多”
在这里插入图片描述
所以要在类外声明,同时注意私有成员,对象无法访问。

Complex operator+(Complex& a, Complex& b){return Complex(a.getReal() + b.getReal(), a.getImag() + b.getImag());}

双参数加法运算符不能在类内定义,但是双目加法运算符+=可以,为什么它就能定义在类内了呢?

因为 y+=z。此时是需要y的值的,也就是说,在真正计算的时候,是需要this的值的,所以应该定义在类内。

编译器会自动检查,若双目运算符定义在类内,则最多只能有一个入参,因为this也算一个。
在这里插入图片描述

相关文章:

类设计者的核查表

核查表 第一篇 如何设计类你的类需要复制构造函数吗何时不需要自定义复制构造函数何时需要自定义复制构造函数总结 什么时候需要将构造函数和赋值运算符设置为私有&#xff1f;1. 单例模式&#xff08;Singleton Pattern&#xff09;2. 禁止复制和赋值3. 工厂模式&#xff08;F…...

深入解析:Python中的决策树与随机森林

在这个数据驱动的时代&#xff0c;机器学习技术已经成为许多企业和研究机构不可或缺的一部分。其中&#xff0c;决策树和随机森林作为两种强大的算法&#xff0c;在分类和回归任务中表现尤为出色。本文将带领大家深入了解这两种算法在Python中的实现&#xff0c;从基础到实战&a…...

umi : 无法加载文件 D:\software\nodejs\node_global\umi.ps1,因为在此系统上禁止运行脚本。

问题详情 2、解决方法 1.使用命令 get-ExecutionPolicy查看 显示Restricted&#xff1a;限制 所以要给权限 2. 使用命令&#xff1a;Set-ExecutionPolicy -Scope CurrentUser 3. 会提示为参数提供值 4. 输入&#xff1a; RemoteSigned 具体如下图所示&#xff0c;成功解决。 报…...

十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)

目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump&#xff0c;俗称跑飞了。 参考cmbacktrace&#xff0c;在瑞萨RZN2L/T2M实现栈回溯&#xff0c;串口打印…...

CTFHub disable_functions通关

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…...

什么是 DevOps 自动化?

DevOps 自动化是一种现代软件开发方法&#xff0c;它使用工具和流程来自动化任务并简化工作流程。它将开发人员、IT 运营和安全团队聚集在一起&#xff0c;帮助他们有效协作并交付可靠的软件。借助 DevOps 自动化&#xff0c;组织能够处理重复性任务、优化流程并更快地将应用程…...

创建Instagram合作广告方法与注意事项

将Instagram作为宣传阵地的品牌和营销人员一定对它的Branded content ads品牌内容广告很熟悉&#xff0c;Instagram在测试并推广创作者市场功能之后&#xff0c;创作者和品牌协作变得更加便利。其中的Partnership ads合作广告能结合品牌和UGC、KOL的力量&#xff0c;帮助品牌提…...

Elasticsearch

什么是elasticsearch 根据维基百科的定义&#xff1a;Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎&#xff0c;具有HTTP Web接口和无模式JSON文档。 为啥要用elasticsearch 高性能&#xff0c;近实时&#xff0c;大数据&…...

YOLO11改进-注意力-引入级联组注意力机制(Cascaded Group Attention, CGA)

在 Vision Transformers 面临计算成本高、推理速度慢的背景下&#xff0c;级联组注意力&#xff08;CGA&#xff09;机制应运而生&#xff0c;它通过将输入特征拆分为不同部分输入各注意力头计算自注意力并级联输出&#xff0c;解决了多头自注意力中注意力头冗余导致的计算效率…...

电磁兼容(EMC):一文解读磁芯复合材料——塑磁

目录 01 塑磁的定义 02 塑磁的常见规格型号 03 塑磁材料的优点 04 塑磁的应用 塑磁,也称为注塑磁,是一种将磁性粉末注入到塑料基体中制成的复合磁体材料。以下是塑磁的定义、应用和材料特性的总结: 01 塑磁的定义 塑磁是以塑料为基体,通过特殊工艺在其中加入磁性粒子(…...

第十四章 C++ 数字

通常&#xff0c;当我们需要用到数字时&#xff0c;我们会使用原始的数据类型&#xff0c;如 int、short、long、float 和 double 等等。这些用于数字的数据类型&#xff0c;其可能的值和数值范围&#xff0c;我们已经在 C 数据类型一章中讨论过。 C 定义数字 我们已经在之前…...

虚幻引擎结构之UObject

一. UObject 的介绍 UObject 是虚幻引擎中的核心基础类,所有其他游戏对象和资源类都直接或间接地继承自它。作为虚幻引擎的基石,UObject 提供了多项关键功能,包括内存管理、序列化、反射(introspection)、垃圾回收以及元数据支持。在虚幻引擎中,UObject 类的实例通常被称…...

2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36)

参考:2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36) ubantu20.04&#xff0c;mysql5.7.13 navicat 远程连接数据库报错 2002 - Can’t connect to server on ‘192.168.1.61’ (36) 一、查看数据库服务是否有启动&#xff0c;发现有启动 systemctl status mysql…...

怎麼在模擬器中實現換IP

方法一&#xff1a;使用代理伺服器 獲取代理伺服器資訊需要一個可用的代理伺服器地址和端口。 設置代理 如果模擬器有內置的網路設置&#xff0c;可以直接在網路設置中輸入代理伺服器的地址和端口。對於不支持直接設置代理的模擬器&#xff0c;可以在應用內設置代理。例如&am…...

【信号滤波 (上)】傅里叶变换和滤波算法去除ADC采样中的噪声(Matlab/C++)

目录 一、ADC采样的噪声简介1.1 常见的ADC噪声来源 二、信号的时域到频域转换2.1 傅里叶变换巧记傅里叶变换 三、傅里叶变换和滤波算法工程实现3.1 使用Matlab计算信号时域到频域的变换3.2 使用Matlab去除特定频点噪声寻找峰值算噪声频率构建陷波滤波器滤除噪声频点陷波滤波器与…...

将多个 Touchstone 文件导入 ANSYS Electronics Desktop

概述 本博客说明了如何将 N 端口标准文件列表导入 ANSYS 电路和 HFSS 3D 布局工具。N端口模型可以引用解决方案文件数组&#xff0c;而不是引用单个文件。下面简要概述了添加多文件 N 端口模型所需的步骤&#xff0c;视频链接中提供了完整的演示。 创建多文件 N 端口模型 要…...

GFPS扩展技术原理(八)-可听设备控制

Hearable Controls 可听设备控制就是手机通过Message Stream去配置影响听感的设置&#xff0c;目前只有一个ANC可供配置&#xff0c;Hearable controls的Message Group的值为0x8。 Active noise control Active noise control也就是主动降噪&#xff08;ANC&#xff09;&…...

对称二叉树

本节判断一棵二叉树是否为对称二叉树,用深度优先算法和广度优先搜索算法均可以实现. 问题描述: 给定一棵二叉树,判断该二叉树是否为对称二叉树. 广度优先思路解析: 如果所有镜像对称位置上两节点都相同,就说明这棵树一定是对称的.那么如何对比对称位置上的两个节点比较方便呢…...

K8s 无头服务(Headless Service)

在Kubernetes中&#xff0c;服务&#xff08;Service&#xff09;是一个抽象层&#xff0c;它定义了一组Pod的访问策略。通常情况下&#xff0c;服务会分配一个集群内的IP地址&#xff0c;并通过这个IP地址和端口来路由流量到后端Pod。然而&#xff0c;Kubernetes还提供了一种特…...

ArcGIS+MIKE21 洪水淹没分析、溃坝分析,洪水淹没动态效果

洪水淹没分析过程&#xff1a; 一、所需数据&#xff1a; 1.分析区域DEM数据 二、ArcGIS软件 1.提取分析区域DEM&#xff08;水库坝下区域&#xff09; 2.DEM栅格转点 3.计算转换后几何点的x和y坐标值&#xff08;精度20、小数位3&#xff09; 4.导出属性表&#xff0c;形式…...

WordPress File Upload 插件 任意文件读取漏洞复现(CVE-2024-9047)

0x01 产品简介 WordPress File Upload插件是一款功能强大的WordPress站点文件上传插件,它允许用户在WordPress站点中的文章、页面、侧边栏或表单中轻松上传文件到wp-contents目录中的任何位置。该插件使用最新的HTML5技术,确保在现代浏览器和移动设备上都能流畅运行,同时也…...

MySQL purged gtid是如何生成和维护的

目录 1. GTID的基本概念2. GTID的生成3. GTID的清除3.1 手动清除二进制日志3.2 自动清除二进制日志3.3 重置主库 在MySQL中&#xff0c;gtid_purged表示已清除的GTID集合。 gtid_purged的生成和维护过程如下&#xff1a; 1. GTID的基本概念 GTID&#xff08;Global Transact…...

vulhub log4j2漏洞复现攻略

前期准备&#xff1a;在安全选项添加端口规则如下 进入靶场环境 cd vulhub/ cd log4j/ cd CVE-2021-44228/ 启动容器 docker-compose up -d docker ps 得到端口号为8983&#xff0c;浏览器访问 先在⾃⼰搭建的DNSLOG平台上获取⼀个域名来监控我们注⼊的效果 可以发现 /sol…...

Android修行手册 - 移动端几种常用动画方案对比

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

springboot484基于springboot的扶贫助农系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装扶贫助农系统软件来发挥其高效地信息处理的作用&#xff0c…...

windows调整鼠标速度

参考:https://baijiahao.baidu.com/s?id1791659684803021646&wfrspider&forpc 鼠标灵敏度&#xff0c;亦称为指针速度或DPI&#xff08;每英寸点数&#xff09;设置&#xff0c;对用户的电脑操作流畅度和精准度至关重要。本篇文章将深入解析如何在Windows操作系统环境…...

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题

内外网数据交换是很多企业和行业都会面临的场景&#xff0c;既然隔离了内外网&#xff0c;重中之重就是要确保数据的安全性&#xff0c;其次在数据流转交换过程中&#xff0c;不能太繁琐复杂&#xff0c;需要让用户快速、便捷的进行数据交换。首先我们来看看&#xff0c;在进行…...

ECharts关系图-关系图11,附视频讲解与代码下载

引言&#xff1a; 关系图&#xff08;或称网络图、关系网络图&#xff09;在数据可视化中扮演着至关重要的角色。它们通过节点&#xff08;代表实体&#xff0c;如人、物体、概念等&#xff09;和边&#xff08;代表实体之间的关系或连接&#xff09;的形式&#xff0c;直观地…...

在已有vue cli项目中添加单元测试配置

使用的是vue cli ^4.0.0的脚手架&#xff0c;项目采用的vue2进行编写&#xff0c;项目本身是没有使用单元测试的。应该挺多项目还是使用的vue2的项目进行开发的&#xff0c;自己在开发中过程中&#xff0c;还是发生了挺多需要记录原来功能的情况&#xff0c;这个时候去翻文档明…...

计算机网络B重修班-期末复习

[TOC] (计算机网络B重修班-期末复习&#xff09; 一、单选 &#xff08;20题&#xff0c;1分/题&#xff0c;共20分&#xff09; 二、判断 &#xff08;10题&#xff0c;1分/题&#xff0c;共10分&#xff09; 三、填空 &#xff08;10题&#xff0c;1分/题&#xff0c;共10…...

常见排序算法

目录 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 希尔排序&#xff08;Shell Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 堆排序&#xff08;Hea…...

开源轮子 - Logback 和 Slf4j

spring boot内置&#xff1a;Logback 文章目录 spring boot内置&#xff1a;Logback一&#xff1a;Logback强在哪&#xff1f;二&#xff1a;简单使用三&#xff1a;把 log4j 转成 logback四&#xff1a;日志门面SLF4J1&#xff1a;什么是SLF4J2&#xff1a;SLF4J 解决了什么痛…...

redis数据类型:list

数据结构 源码版本&#xff1a;7.2.2路径&#xff1a;src/adlist.h 关于list的 头文件中涉及到的这三个结构体如下 /* Node, List, and Iterator are the only data structures used currently. */ # 节点 typedef struct listNode {struct listNode *prev; # 前元素的指针s…...

聚类之轮廓系数

Silhouette Score&#xff08;轮廓系数&#xff09;是用于评估聚类质量的指标之一。它衡量了数据点与同簇内其他点的相似度以及与最近簇的相似度之间的对比。 公式 对于一个数据点 i&#xff1a; a(i): 数据点 i 到同簇内其他点的平均距离&#xff08;簇内不相似度&#xff…...

时钟芯片入门指南:从原理到实践

DS1302时钟 实时时钟芯片&#xff0c;精度高、 DS1302芯片可以对年、月、日、周、时、分、秒进行计时&#xff0c;并且具有闰年补偿等多种功能。 采用三线接口与CPU进行同步通信(采用串行数据传送方式简单SPI 3线接口)&#xff0c;并可采用突发方式一次传送多个字节的时钟信号…...

【Java笔记】第十七章:反射

一、反射 1. 反射(Reflection)&#xff1a; 允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类的对象(实…...

Vue:实现输入框不能输负数功能

1、使用v-model指令 <input type"number" v-model"value" min"0" input"checkInput"> checkInput() {this.value Math.max(0, parseInt(this.value)); } 2、使用计算属性 <template><div><input type"…...

GamePlay UE网络同步

基本同步方式: ①未复制:函数仅在本机运行,不对任何人造成影响 ②在服务器上运行:当函数在客户端上调用时才能生效。客户端会通知服务器:“请在服务器上执行这个事件”,事件的具体内容会被在服务器上执行。 ③组播(多播,Multicast):当函数在服务器上调用时才能生效…...

iLoveIMG:强大的在线图片编辑工具分享

在数字化时代&#xff0c;图片处理已成为日常工作中不可或缺的一部分。无论是优化网页图片、调整尺寸、压缩处理还是格式转换&#xff0c;高效且免费的工具总是令人向往。今天&#xff0c;我要为大家介绍一个非常实用的在线图片编辑工具——iLoveIMG。它不仅功能强大&#xff0…...

重温设计模式--工厂模式(简单、工厂、抽象)

文章目录 工厂模式定义工厂模式通常可以细分为以下几种类型1、简单工厂模式&#xff08;Simple Factory Pattern&#xff09;2、工厂方法模式&#xff08;Factory Method Pattern&#xff09;3、抽象工厂模式&#xff08;Abstract Factory Pattern) UML 图1、简单工厂模式UML2、…...

人工智能ACA(六)--计算机视觉基础

一、计算机视觉概述 1. 计算机视觉定义 人工智能&#xff08;AI&#xff09;的一个重要分支旨在使计算机和系统能够从图像或多维数据中“理解”和“解释”视觉世界通过模拟人类视觉系统&#xff0c;计算机视觉技术能够自动执行诸如识别、分类、检测和跟踪等任务。 2. 计算机…...

WPF+MVVM案例实战与特效(四十六)- 打造动态背景时钟控件,轻松提升界面美感

文章目录 1、引言2、案例效果2、时钟控件封装1、创建用户控件2、依赖属性3、代码解释4、时钟图片资源3、控件使用4、源代码获取5、总结1、引言 在开发WPF应用程序时,创建一个美观且功能丰富的用户控件可以大大提升用户体验。今天,我们将深入探讨如何构建一个好看的时钟控件,…...

【读书笔记】《论语别裁》爱与罪

一、内容摘要 《论语别裁》第01章讨论了孔子关于孝悌的思想&#xff0c;以及其在中国文化中的重要性和复杂性。文中引用了有子的观点&#xff0c;强调孝弟是为人之本。然而&#xff0c;随着历史的发展&#xff0c;孔子的思想也被误解或被用作维护专制统治的工具。通过司马迁的…...

Log4j2漏洞

输入systemctl start docker启动docker 进入到CVE-2021-44228 输入docker-compose up -d开启环境 输入docker ps查看开启环境的端口 去访问靶场 打开dnslog平台&#xff0c;获取一个域名来监控我们所获得的内容 访问http://8.155.8.255:8983/solr/admin/cores?action${jndi:ld…...

ds刷题DAY1|66.加一、485. 最大连续 1 的个数

66. 加一 - 力扣&#xff08;LeetCode&#xff09; 从数组尾部开始遍历&#xff0c;遇到不是9的直接加一并返回&#xff1b;遇到等于9的变成0&#xff0c;并且继续判断下一位。如果全部为9&#xff0c;创建一个新数组&#xff0c;长度为原长度加一&#xff0c;首位为1&#xff…...

合合信息:探索视觉内容安全新前沿

2024年12月13日-15日&#xff0c;中国图象图形学学会在杭州召开。大会期间&#xff0c;来自合合信息的图像算法研发总监郭丰俊进行了主题为“视觉内容安全技术的前沿进展与应用”的演讲&#xff0c;介绍了视觉内容安全问题&#xff0c;并总结了现今的技术发展&#xff0c;对我很…...

C++23新特性解析:[[assume]]属性

1. 引言 在C的发展历程中&#xff0c;性能优化一直是一个核心主题。C23引入的[[assume]]属性为开发者提供了一个强大的工具&#xff0c;允许我们直接向编译器传达程序的不变量&#xff08;invariant&#xff09;&#xff0c;从而实现更好的代码优化。 1.1 为什么需要assume&a…...

航电系统电子罗盘的作用

一、基本功能与原理 电子罗盘&#xff0c;又称数字罗盘&#xff0c;是利用地磁场来定北极的一种方法。它结合了电子技术和晶体技术&#xff0c;通过灵敏的线圈、控制电路及读出系统来探测特定磁场&#xff0c;从而确定方向。电子罗盘可以测量磁场强度、方向、大小及旋转角度&am…...

从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略

在数据库领域,数据存储和管理的效率与可靠性是决定系统性能、可扩展性和易于管理的关键因素。PostgreSQL 和 SQL Server 在数据存储方面采取了略有不同的方式。 PostgreSQL 中一个数据库管理员经常遇到的关键概念是 $PGDATA 文件夹。在这里,我们将探讨 $PGDATA 文件夹是什么…...

IDEA无法打开插件市场的解决

1.版本 我的IDEA版本号为2020.1.4 大家可以从IDEA的help->about进行版本号的查看 2.解决 我们直接到jetbrains官网搜索你想要下载的插件 直接下载即可自动导入...