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

C++——多态、抽象类和接口

目录

多态的基本概念

如何实现多态

在C++中,派生类对象可以被当作基类对象使用

编程示例

关键概念总结

抽象类

一、抽象类的定义

基本语法

二、抽象类的核心特性

1. 不能直接实例化

2. 派生类必须实现所有纯虚函数才能成为具体类

3. 可以包含普通成员函数和数据成员

编程示例

关键点说明

接口

接口的基本概念


多态的基本概念

想象一下,你有一个遥控器(这就像是一个基类的指针),这个遥控器可以控制不同的电子设备(这些设备就像是派生类。无论是电视、音响还是灯光,遥控器上的“开/按钮(这个按钮就像是一个虚函数)都能控制它们,但具体的操作(打开电视、播放音乐、开灯)则取决于你指向的设备。

如何实现多态

1. 使用虚函数(Virtual Function

我们在基类中定义一个虚函数,这个函数可以在任何派生类中被重写或者说定制。使用关键字 virtual 来声明。

2. 创建派生类并重写虚函数

在派生类中,我们提供该虚函数的具体实现。这就像是告诉遥控器,当你控制我的这个设备时,这个按钮应该这样工作”

3. 通过基类的引用或指针调用虚函数

当我们使用基类类型的指针或引用来调用虚函数时,实际调用的是对象的实际类型(派生类)中的函数版本。

当基类包含至少一个虚函数(通常是纯虚函数),派生类重写该函数后,在main函数中用基类指针指向派生类对象,并通过该指针调用虚函数时,实际调用的是派生类的实现,这种现象称为多态。

在C++中,派生类对象可以被当作基类对象使用

  • 派生类对象可以直接赋值给基类指针/引用

  • 但反过来不行(基类对象不能当作派生类对象)

编程示例

#include <iostream>
using namespace std;// 基类——遥控器(抽象概念)
class RemoteCon
{
public:// 虚函数:声明遥控器的"开启"功能,允许子类重写virtual void open() = 0; // 纯虚函数(=0表示没有默认实现)// 这样RemoteCon就成为抽象类,不能直接实例化
};// 派生类——电视遥控器,继承于基类遥控器
class TVRemoteCon : public RemoteCon
{
public:// 重写(override)基类的open函数void open() override{cout << "电视遥控器开启键被按下" << endl;}
};// 派生类——灯光遥控器,继承于基类遥控器
class LightRemoteCon : public RemoteCon
{
public:void open() override{cout << "灯光遥控器开启键被按下" << endl;}
};// 派生类——空调遥控器,继承于基类遥控器
class AirConditionerRemoteCon : public RemoteCon
{
public:void open() override{cout << "空调遥控器开启键被按下" << endl;}
};int main()
{// 第一部分:通过指针实现多态// 创建一个指向电视遥控器的基类指针RemoteCon* remoteCon = new TVRemoteCon();  remoteCon->open();  // 调用TVRemoteCon的open()// 创建一个指向灯光遥控器的基类指针RemoteCon* remoteCon2 = new LightRemoteCon();remoteCon2->open();  // 调用LightRemoteCon的open()// 第二部分:通过引用实现多态AirConditionerRemoteCon kongTiao;  // 创建空调遥控器对象RemoteCon& remoteCon3 = kongTiao;  // 创建基类引用绑定到派生类对象remoteCon3.open();  // 调用AirConditionerRemoteCon的open()// 释放动态分配的内存delete remoteCon;delete remoteCon2;return 0;
}

代码解释:

RemoteCon *remoteCon = new TVRemoteCon; // 创建一个指向电视的遥控器指针
remoteCon->open();

尽管 remoteCon 是 RemoteCon* 类型的指针,但它实际指向的是 TVRemoteCon 对象。在运行时,C++ 的多态机制会依据对象的实际类型来调用相应的 open 函数实现,所以这里调用的是 TVRemoteCon 类中的 open 函数。

关键概念总结

  1. 虚函数(virtual):允许函数在派生类中被重写

  2. override关键字:明确表示重写基类虚函数

  3. 多态两种实现

    • 基类指针指向派生类对象

    • 基类引用绑定派生类对象

  4. 运行时绑定:具体调用哪个函数在运行时决定

抽象类

一、抽象类的定义

抽象类是指包含至少一个纯虚函数的类,它不能被实例化,只能作为其他类的基类。

基本语法

class 抽象类名 {
public:virtual 返回类型 函数名(参数列表) = 0; // 纯虚函数// 其他成员...
};

二、抽象类的核心特性

1. 不能直接实例化

class Shape {
public:virtual double area() = 0;
};// Shape s;  // 错误!不能创建抽象类对象

2. 派生类必须实现所有纯虚函数才能成为具体类

class Circle : public Shape {
public:double area() override { return 3.14*r*r; } // 必须实现
};

3. 可以包含普通成员函数和数据成员

class Animal {
public:virtual void speak() = 0;void eat() { cout << "Eating..." << endl; } // 普通成员函数
protected:int age; // 数据成员
};

编程示例

#include <iostream>using namespace std;// 这是一个抽象类,包含3个纯虚函数
// 因为有纯虚函数,所有这个类不能被实例化
class Teacher { 
public:virtual void course() = 0;    // 声明课程内容的纯虚函数virtual void startClass() = 0; // 开始上课的纯虚函数virtual void endClass() = 0;   // 结束课程的纯虚函数
};// 具体派生类 EnglishTeacher
class EnglishTeacher : public Teacher {
public:void course() override {cout << "这节课是英语课" << endl;}void startClass() override {cout << "开始上英语课" << endl;}void endClass() override {cout << "英语课结束" << endl;}
};// 具体派生类 ProTeacher
class ProTeacher : public Teacher {
public:void course() override {cout << "这节课是C++" << endl;}void startClass() override {cout << "开始上C++" << endl;}void endClass() override {cout << "C++结束" << endl;}
};int main() {// 直接使用具体类EnglishTeacher t;t.course();      // 输出: 这节课是英语课t.startClass();  // 输出: 开始上英语课t.endClass();    // 输出: 英语课结束// 多态用法Teacher* t2 = new ProTeacher;t2->course();     // 输出: 这节课是C++t2->startClass(); // 输出: 开始上C++t2->endClass();   // 输出: C++结束delete t2; // 记得释放内存return 0;
}

关键点说明

  1. 多态的实现

    • 通过基类指针Teacher*指向派生类对象ProTeacher

    • 调用虚函数时,实际执行的是派生类的实现

  2. override关键字

    • 确保函数确实重写了基类的虚函数

    • 如果签名不匹配,编译器会报错

  3. 抽象类的作用

    • 强制派生类实现特定接口

    • 统一了不同种类教师的调用方式

  4. 内存管理

    • 示例中new ProTeacher需要手动delete

接口

在C++中,接口是一种特殊的抽象类,它只包含纯虚函数而不包含任何数据成员或具体实现。接口用于定义行为规范,让不同的类可以遵循相同的接口标准。

接口的基本概念

C++ 中,虽然没有像其他编程语言(比如 Java 中的接口Interface)一样直接定义接口的关键字,但可以通过抽象类和纯虚函数的方式来实现接口的概念。

接口通常用于定义类应该实现的方法,但不提供具体实现。这样的实现方式允许多个类共享相同的接口,同时让每个类根据需要去实现这些接口。

一个类作为接口可以通过以下步骤来实现:

1. 定义抽象类:创建一个包含纯虚函数的抽象类,这些函数构成了接口的一部分。这些函数在抽象类中只有声明而没有具体的实现。

2. 派生类实现接口:派生类继承抽象类,并实现其中的纯虚函数,以具体实现接口定义的方法。

#include <iostream>using namespace std;class Person // 接口
{
public:virtual void eat() = 0; // 吃virtual void drink() = 0; // 喝virtual void haveFun() = 0; // 玩乐
};class Woman : public Person
{
public:void eat() override{cout << "麻辣鸡腿堡" << endl;}void drink() override{cout << "珍珠奶茶" << endl;}void haveFun() override{cout << "剧本杀" << endl;}
};class Man : public Person
{
public:void eat() override{cout << "板烧鸡腿堡" << endl;}void drink() override{cout << "可乐" << endl;}void haveFun() override{cout << "打桌球" << endl;}
};int main()
{Woman w;w.eat();w.drink();w.haveFun();Man m;m.eat();m.drink();m.haveFun();return 0;
}

Person 类是一个抽象基类,它包含了三个纯虚函数(eat()drink()haveFun()),这实际上起到了接口的作用。

Woman 和 Man 类继承自 Person 并实现了所有这些纯虚函数。

所以可以说这是一个接口的实现,但更准确的说法是:

  • 这是一个使用 C++ 纯虚函数实现的接口设计模式

  • Person 类扮演了接口的角色

  • Woman 和 Man 是具体实现这个接口的类

在 C++ 中,这种设计常被称为"接口类"或"抽象基类",它强制派生类必须实现这些方法,这正是接口的核心特性。

 

相关文章:

C++——多态、抽象类和接口

目录 多态的基本概念 如何实现多态 在C中&#xff0c;派生类对象可以被当作基类对象使用 编程示例 关键概念总结 抽象类 一、抽象类的定义 基本语法 二、抽象类的核心特性 1. 不能直接实例化 2. 派生类必须实现所有纯虚函数才能成为具体类 3. 可以包含普通成员函数和…...

模拟实现strncat、qsort、atoi

目录 前言 一、模拟实现strncat 参数 代码演示&#xff1a; 二、模拟实现qsort 参数 代码演示&#xff1a; 前言 本文主要是对strncat&#xff0c;qsort&#xff0c;atoi的模拟实现 一、模拟实现strncat C 库函数 char *strncat(char *dest, const char *src, size_t n…...

记录学习的第三十天

今天终于又开始写博客了。 还是滑动窗口问题&#xff0c;这段时间不出意外都是这了 上面的思路是我自己做的&#xff0c;但是不知道为什么不行&#xff0c;有没有大佬能指点一下我。 接下来这道题是进阶的。不过我之前的基础都做的很艰难&#xff0c;道阻且长啊。...

图像预处理-直方图均衡化

一.什么是直方图 反映图像像素分布的统计图&#xff0c;横坐标就是图像像素的取值&#xff0c;纵坐标是该像素的个数。 二.绘制直方图 histcv2.calcHist(images, channels, mask, histSize, ranges) - images&#xff1a;输入图像列表&#xff08;必须用[ ]包裹&#xff09;&a…...

应用案例|兵器重工:某体系需求视图模型开发

某体系需求视图模型开发 一、项目背景 本项目为某体系的需求视图模型开发&#xff0c;其中体系设计建模过程可以分解为7大部分&#xff0c;即建模前期准备、全景视点模型正向设计、能力视点模型正向设计、作战视点模型正向设计、系统视点模型正向设计、体系模型反向追溯设计以…...

YOLOv8改进:ShapeIoU与InnerShapeIoU损失函数的理论与实践

文章目录 YOLOv8 损失函数概述ShapeIoU 与 InnerShapeIoU 损失介绍ShapeIoU 损失InnerShapeIoU 损失 ShapeIoU 和 InnerShapeIoU 损失函数的实现ShapeIoU 损失函数代码实现InnerShapeIoU 损失函数代码实现损失函数在 YOLOv8 中的应用 实验效果与分析ShapeIoU 和 InnerShapeIoU …...

用Go语言正则,如何爬取数据

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

Java中实现单例模式的多种方法:原理、实践与优化

单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单且最常用的模式之一&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供全局访问点。在 Java 开发中&#xff0c;单例模式广泛应用于配置管理、日志记录、数据库连接池和线程池等场景。然而&#x…...

Pikachu靶场-RCE漏洞

1. RCE漏洞原理 核心问题&#xff1a;应用程序未对用户输入进行严格过滤&#xff0c;直接将输入内容拼接至系统命令、代码执行函数或反序列化过程中。常见触发场景&#xff1a;命令注入&#xff1a;用户输入被拼接到操作系统命令&#xff08;如system()、exec()&#xff09;。代…...

OpenCv高阶(七)——图像拼接

目录 一、图像拼接的原理过程 1. 特征检测与描述&#xff08;Feature Detection & Description&#xff09; 2. 特征匹配&#xff08;Feature Matching&#xff09; 3. 图像配准&#xff08;Image Registration&#xff09; 4. 图像变换与投影&#xff08;Warping&…...

​​电商系统用户需求报告(示例)

目录 电商系统用户需求报告​​ ​​1. 引言​​ 1.1 目的 1.2 范围 ​​2. 用户角色与核心需求​​ ​​2.1 消费者​​ ​​2.2 商家​​ ​​2.3 平台管理方​​ ​​3. 非功能性需求​​ ​​4. 业务流程​​ ​​4.1 消费者购物流程​​ ​​4.2 商家入驻流程…...

图像挖掘课程笔记-第一章:了解机器视觉

一、什么是图像挖掘&#xff08;Image Mining&#xff09;&#xff1f; 图像挖掘是一种从大量图像中自动提取有用信息、知识或模式的技术&#xff0c;它融合了图像处理、机器学习、数据库、人工智能、数据挖掘等多个领域的内容。 &#x1f9e0; 图像挖掘与图像处理的区别 图像…...

Spring集合注入Bean

Spring框架中实现Bean集合注入的详细方法 1. 基础自动注入方式1.1 使用Autowired注入List1.2 使用Autowired注入Map 2. 更精细的控制方式2.1 使用Qualifier进行筛选2.2 使用自定义注解筛选 3. Java配置类方式4. 排序注入的Bean集合4.1 使用Order注解4.2 实现Ordered接口 5. 条件…...

实验一 进程控制实验

一、实验目的 1、掌握进程的概念&#xff0c;理解进程和程序的区别。 2、认识和了解并发执行的实质。 3、学习使用系统调用fork()创建新的子进程方法&#xff0c;理解进程树的概念。 4、学习使用系统调用wait()或waitpid()实现父子进程同步。 5、学习使用getpid()和getppi…...

[预备知识]4. 概率基础

概率基础 本章节介绍深度学习中的概率基础知识&#xff0c;包括基本概念、概率分布和统计推断。 1. 概率基础 1.1 基本概念 随机变量&#xff1a;可以取不同值的变量&#xff0c;其值由随机试验的结果决定概率分布&#xff1a;描述随机变量取值的可能性分布条件概率&#x…...

第33周JavaSpringCloud微服务 电商进阶开发

一、课程介绍 1. 定时任务 课程主题 &#xff1a;Spring Cloud 电商进阶开发定时任务定义 &#xff1a;学习什么是定时任务。定时任务学习内容 &#xff1a;定时任务实现方法、cron 表达式。定时任务实践 &#xff1a;在 Spring 中使用 schedule 注解&#xff0c;定期关闭过期…...

基于cubeMX的hal库STM32实现硬件IIC通信控制OLED屏

1、通常的方法是使用软件模拟IIC来实现OLED屏的显示控制&#xff0c;这里用STM32单片机的硬件IIC来实现OLED屏的显示&#xff0c;主控芯片为STM32F103RCT6&#xff0c;正点原子mini开发板。 2、cubemx配置过程 &#xff08;1&#xff09;配置时钟和下载 &#xff08;2&#x…...

游戏工作室为何要更换IP进行多开?工作室使用代理IP要注意什么?

在当今的游戏产业中&#xff0c;游戏工作室为了提升效率、规避风险或突破平台限制&#xff0c;常常需要通过更换IP进行多开操作。这一现象背后涉及技术、商业规则和网络安全等多重因素&#xff0c;而代理IP的选择与使用也成为工作室运营中的关键环节。以下是关于游戏工作室为何…...

postgreSQL 如何使用 dblink

SELECT b.id, flow_name, user_id,u.name FROM bpm_form_info b JOIN vrms_user u on b.user_idu.id dblink SELECT b.id, flow_name, user_id,u.name FROM bpm_form_info b – vrms_user u on b.user_idu.id JOIN dblink( ‘dbnameuser_db userpostgres passwordWs199612’,…...

121.在 Vue3 中使用 OpenLayers 实现去掉鼠标右键默认菜单并显示 Feature 信息

🎯 实现效果 👇 本文最终实现的效果如下: ✅ 地图初始化时绘制一个多边形; ✅ 鼠标 右键点击地图任意位置; ✅ 若命中 Feature,则弹出该图形的详细信息; ✅ 移除浏览器默认的右键菜单,保留地图交互的完整控制。 💡 整个功能基于 Vue3 + OpenLayers 完成,采用 Com…...

复盘20250422

深度分析及个股推荐 1. 行业前景与个股逻辑梳理 从提供的股票信息来看&#xff0c;主要涉及以下行业&#xff1a;合成尼古丁&#xff08;电子烟&#xff09;、化工、跨境支付、跨境电商、农药、食品饮料、光刻机、电子商务、造纸等。需结合行业景气度、政策支持、公司核心竞争…...

MQ底层原理

RabbitMQ 概述 RabbitMQ 是⼀个开源的⾼性能、可扩展、消息中间件&#xff08;Message Broker&#xff09;&#xff0c;实现了 Advanced Message Queuing Protocol&#xff08;AMQP&#xff09;协议&#xff0c;可以帮助不同应⽤程序之间进⾏通信和数据交换。RabbitMQ 是由 E…...

30分钟编写十大排序算法完成

import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;//排序算法 public class test_04_22 {public static void swap(int[] nums, int i, int j){int temp nums[i];nums[i] nums[j];nums[j] temp;}//冒泡排序-稳定…...

为什么家电主板采用GND走线而不是整面铺GND铜

不管什么接地方式&#xff0c;本质是为了使得电流的回流路径最短。只要电流的回流路径最短&#xff0c;怎么都可以&#xff01; 如下图的芯片的一个信号的回流路径&#xff0c;是一个很糟糕的接地&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&a…...

NVIDIA 自动驾驶技术见解

前言 参与 NVIDIA自动驾驶开发者实验室 活动&#xff0c;以及解读了 NVIDIA 安全报告 自动驾驶 白皮书&#xff0c;本文是我的一些思考和见解。自动驾驶技术的目标是为了改善道理安全、减少交通堵塞&#xff0c;重塑更安全、高效、包容的交通生态。在这一领域&#xff0c;NVI…...

真我推出首款 AI 翻译耳机,支持 32 种语言翻译

2025 年 4 月 22 日&#xff0c;真我手机官微宣布&#xff0c;其首款 AI 翻译耳机 Buds Air7 Pro 将于 4 月 23 日 16 时正式上市1。这款耳机接入了讯飞星火认知大模型 4.0 Ultra&#xff0c;支持中文与 32 种语言面对面翻译&#xff0c;以及同声传译功能。 除了 AI 翻译功能&a…...

如何简化复杂流程提升执行效率

简化复杂流程、提升执行效率的关键在于&#xff1a;聚焦核心目标、减少冗余环节、推动系统自动化、赋能一线决策、流程分级设计。其中&#xff0c;聚焦核心目标 是流程优化的第一步。流程不该为了“流程而流程”&#xff0c;而应服务于业务目标。Gartner在《数字化运营报告》中…...

动态规划算法:完全背包类问题

前言 现在我们考虑下面的问题&#xff1a; &#xff08;1&#xff09;小明有一个背包&#xff0c;背包容积为v&#xff0c;有m种物品&#xff0c;其中第i种物品的价值为val[i]&#xff0c;体积为t[i]&#xff0c;每样物品有无限个&#xff0c;请问背包内物品总价值最大为多少?…...

数据存储方式补码原码反码

1. 关于数据存储&#xff08;补码、原码、反码&#xff09; 有符号类型&#xff08;Signed Types&#xff09; 存储方式&#xff1a;现代计算机普遍采用 补码&#xff08;Two’s Complement&#xff09; 存储有符号整数。 原码&#xff1a;最高位为符号位&#xff08;0正&…...

【AAudio】A2dp sink创建音频轨道的源码流程分析

一、AAudio概述 AAudio 是 Android 8.0(API 级别 26)引入的 C/C++ 原生音频 API,专为需要低延迟、高性能音频处理的应用设计,尤其适用于实时音频应用(如音频合成器、音乐制作工具、游戏音效等)。 1.1 主要特点 低延迟:通过减少音频数据在内核与用户空间之间的拷贝,直…...

黑马点评之Feed流技术实现关注推送与滚动分页查询

Feed流 关注推送也叫做Feed流&#xff0c;直译为“投喂”。为用户持续的提供“沉浸式体验”&#xff0c;通过无限下拉刷新获取新的信息。 Feed流&#xff08;信息流&#xff09;是一种常见的内容分发形式&#xff0c;通过动态更新的内容列表向用户展示个性化或实时信息。典型应…...

vue3+canvas裁剪框样式【前端】

目录 canvas绘制裁剪框&#xff1a;拖拽改变框的大小&#xff1a;圆圈样式&#xff1a;方块样式&#xff1a; canvas绘制裁剪框&#xff1a; // 绘制裁剪框 const drawCropRect (ctx: CanvasRenderingContext2D): void > {if (cropRect.value.width > 0 && crop…...

Python 设计模式:模板模式

1. 什么是模板模式&#xff1f; 模板模式是一种行为设计模式&#xff0c;它定义了一个操作的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下&#xff0c;重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…...

usb2.0的硬件知识(一)

一、USB2.0的硬件知识 1.1 USB2.0速率 USB 2.0协议支持3种速率&#xff1a;低速(Low Speed&#xff0c;1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)&#xff1b;USB Hub、USB设备&#xff0c;也分为低速、全速、高速三种类型。 1.2 USB2.0硬件线序组成 U…...

LangGraph(二)——QuickStart样例中的第二步

目录 1. 添加依赖2. 官网QuickStart——第二步&#xff1a;用工具增强聊天机器人2.1 Tavily Search2.2 简单测试Tavily Search2.3 添加带工具的ChatBot node2.4 添加tool node2.5 添加条件边2.6 可视化StateGraph2.7 构建聊天循环 参考 1. 添加依赖 LangGraph(一)——QuickStar…...

机器学习第二篇 多变量线性回归

数据集&#xff1a;世界幸福指数数据集中的变量有幸福指数排名、国家/地区、幸福指数得分、人均国内生产总值、健康预期寿命、自由权、社会支持、慷慨程度、清廉指数。我们选择GDP per Capita和Freedom&#xff0c;来预测幸福指数得分。 文件一&#xff1a;linear&#xff0c;…...

【MCP Node.js SDK 全栈进阶指南】中级篇(3):MCP高级资源设计

前言 在MCP TypeScript-SDK的初级篇中,我们介绍了资源开发的基础知识,包括静态资源与动态资源的创建、资源模板设计与参数提取,以及基本的资源列表与发现机制。随着应用规模的扩大和复杂性的提高,我们需要更加高级的资源设计方案来应对各种挑战。 本文作为中级篇的第三篇…...

PostgreSQL 常用日志

PostgreSQL 常用日志详解 PostgreSQL 提供了多种日志类型&#xff0c;用于监控数据库活动、排查问题和优化性能。以下是 PostgreSQL 中最常用的日志类型及其配置和使用方法。 一、主要日志类型 日志类型文件位置主要内容用途服务器日志postgresql-<日期>.log服务器运行…...

PostgreSQL认证培训推荐机构

首先来看一张2025年4月份db-engines上的数据库排行情况&#xff0c;前三名是雷打不动的Oracle、MySQL、Microsoft SQL Server&#xff0c;排名第四的就是我们今天的主角 - PostgreSQL数据库&#xff0c;从这张图上可以看出&#xff0c;PostgreSQL数据库的上升超非常明显&#x…...

2025年NISP一级题库试题

NISP一级考试只考50道单选题&#xff0c;难度不算大&#xff0c;话不多说&#xff0c;直接上硬菜&#xff01; 1、物理销毁的方式不包括&#xff08;&#xff09; .消磁 B.焚化炉烧毀 C.反复覆写数据 &#xff24;.机器硏磨粉碎 2、信息安全应该建立贯穿信息系统的整个生命周期…...

pip install pymysql报错

python安装pymysql报错解决 【现象】 很多时候会出现安装pip包报错的问题&#xff0c;看过很多网上教程以及ai都是如下说法&#xff1a; 镜像问题pip版本问题ssh证书问题网络问题… 在遇见这些情况时&#xff0c;上述的各种解决方法都一一实验过但最后都是ERROR。 【解决办…...

达梦官方管理工具 SQLark 更新--不仅支持达梦、Oracle、MySQL,还新增 PostgreSQL 数据库!

SQLark 是一款面向信创应用开发者的数据库开发和管理工具&#xff0c;用于快速查询、创建和管理不同类型的数据库系统&#xff0c;已支持达梦、Oracle、MySQL数据库&#xff1b;在最新的 V3.4 版本中&#xff0c;SQLark 新增了对 PostgreSQL 的支持&#xff0c;兼容 PostgreSQL…...

Windows 同步-互锁变量访问

互锁变量访问 应用程序必须同步对多个线程共享的变量的访问。 应用程序还必须确保对这些变量的作以原子方式执行&#xff08;完全或根本不执行&#xff09;。 对正确对齐的 32 位变量的简单读取和写入是原子作。 换句话说&#xff0c;你最终不会只更新变量的一部分;所有位都以…...

前端学习笔记

文章目录 前端主要内容基于脚手架创建前端工程vue的基本使用axios 路由Vue-Router路由组成嵌套路由 状态管理 vuex心得 前端主要内容 HTML、CSS JavaScript axios Vue基础语法&#xff08;router、vuex、typescript&#xff09; Element UI 基于脚手架创建前端工程 node.js …...

2025-04-22| Docker: --privileged参数详解

在 Docker 中&#xff0c;--privileged 是一个运行容器时的标志&#xff0c;它赋予容器特权模式&#xff0c;大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节&#xff1a; 作用 完全访问宿主机的设备&#xff1a; 容器可以访问宿主机的所有设备&am…...

Java八股 深入理解Spring的AOP 面向切面编程 底层 保姆级教程 手写例子

目录 概念 AOP 术语 1. 连接点&#xff08;Jointpoint&#xff09;&#xff1a; 2. 切入点&#xff08;Pointcut&#xff09;&#xff1a; 3. 通知&#xff08;Advice&#xff09;&#xff1a; 4. 方面/切面&#xff08;Aspect&#xff09;&#xff1a; 5. 引入&#xff…...

macOS安全隐私最佳实践分析

1. 引言 随着数字世界的不断扩展&#xff0c;个人和组织面临的安全与隐私威胁也日益增加。作为专业的安全合规与隐私保护研究团队&#xff0c;Kaamel 对 macOS 系统的安全隐私现状进行了全面分析&#xff0c;并提出了一系列最佳实践建议&#xff0c;旨在帮助用户更好地保护自己…...

WeakSet:JavaScript 中容易被忽视的“弱集合”

目录 WeakSet 详解 基本概念 创建 WeakSet WeakSet 的主要方法 WeakSet 的特性 WeakSet 的使用场景 1. 避免内存泄漏&#xff08;DOM 元素管理&#xff09; 2. 临时缓存系统 3. 私有属性模拟 4. 防止循环引用 与其他数据结构的对比 1. WeakSet 没有实例属性 2. We…...

Discuz!+DeepSeek:传统论坛的智能化蜕变之路

在数字化浪潮中&#xff0c;社区论坛作为互联网早期的产物&#xff0c;面临着功能单一、用户体验滞后的发展瓶颈。虎跃办公&#xff08;https://www.huyueapp.com&#xff09;通过Discuz!搭建的网址导航网站&#xff0c;在集成DeepSeek的AI能力后&#xff0c;成功实现了从工具导…...

vs2017中,将CMake构建目录设置在项目目录下

修改CMake构建目录位置 在Visual Studio 2017中&#xff0c;可以通过以下方法将CMake构建目录设置在项目目录下&#xff1a; 修改CMakeSettings.json文件‌&#xff1a; 在VS中生成CMakeSettings.json文件&#xff08;通过点击编译平台按钮如x64-Debug或x64-Release&#xf…...