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

C++初阶-类和对象(上)

本章内容相对于之后的类和对象中和下都比较简单,但是整体还是有些难度的。

目录

1.类的定义

1.1类定义格式

1.2访问限定符

1.3类域

2.实例化

2.1实例化概念

2.2对象大小

3.this指针

4.练习

4.1选择题1

4.2选择题2

5.总结


1.类的定义

1.1类定义格式

(1)class为定义类的关键字,类的定义的格式为:class name{main};其中name是类的名字,main包含了类的主体内容。其次类定义结束时有个";"不能省略,和之前的结构体一样。类体中的内容称为类的成员;类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。

类可以存储变量和函数,这比C语言学过的结构体又增加了一个存储的类型。可以说C++中的类替换了C语言的结构体的作用。

(2)为了区分成员变量,一般习惯上成员变量会加一个特殊表示,但不是强制的。

#include<iostream>
using namespace std;
class Date
{//普通定义我们可能看不懂,如://int year;//int month;//int day;// 变量的初始化//void Init(int year, int month, int day)//{//year = year;//month = month;//day = day;//}//其实我们也可以把这个形参换一下,换为a,b,c这种简单的字符//虽然方便了,但是我们怎么区分这个形参到底是year还是month还是day//所以我们一般写函数的形参都是浅显易懂的形参//我们可以在类里面定义的变量在原来的变量基础上加个_或者其他的int _year;int _month;int _day;//设为公有,否则我们会访问不了这个函数//这个之后也会讲
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}//打印变量//我们一般在类里面实现函数,因为之后在调用时不能随便访问变量(之后讲)void Print(){cout << _year << ' ' << _month << ' ' << _day << endl;}
};
int main()
{//类的实例化(之后会讲)//这和结构体的差不多Date d;d.Init(2025, 4, 12);d.Print();return 0;
}

由于里面很多没学,但是主要是介绍基本知识以方便之后我们测试函数是否写对。运行结果如下:

(3)C++中struct也可以定义类,C++兼容C语言中struct的用法,同时struct升级成了类,一般情况下我们还是用class定义类。

但是C++在写结构体(类)时就不用struct name a;这样了,而是把struct去掉直接用类名了即name a;即可,当然之前的写法也不会报错。

(4)定义在类里面的成员函数默认为inline。

这个不要多问,规定就是规定!

1.2访问限定符

(1)C++一种实现封装方式,用类将对象的属性与方法(变量与函数)结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

我们在类里面的变量如果不加以限制的情况下就会被外部随意修改,这样很难维持数据的稳定,所以我们需要把大部分变量设置为私有(private/protected),把大部分函数设置为公有(public)方便调用,类里面的数据需要修改的情况下需要经过类中的函数来修改,因为我们类中的函数是我们自己写的,所以更安全些,通过这些函数来保证变量的稳定。

(2)public修饰的成员在类外可以直接被访问,protected和private修饰的成员在类外不能直接被访问。在之后讲的继承章节将会体现出protected和private的区别。

(3)访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符为止,如果后面没有访问限定符,作用域就到类结束的位置为止。

(4)class定义成员没有被访问限定符修饰时,默认为private,struct默认为public。可以有多个访问限定符!

这个东西的作用在之后会逐渐体现出来,所以我们现在就没必要管这么多,只要学就可以了,只要讲了就有用处!

1.3类域

类和命名空间一样都定义了一个新的作用域(命名空间知识见:https://blog.csdn.net/2401_86446710/article/details/147100008之前我写的博客:C++入门基础),类的所有成员都在类的作用域中,在类体外定义成员时,需要使用::作用域操作符指明成员属于哪个区域。这也隔开了类和类的命名冲突。

而类的声明如下形式:

//类的定义
class Date
{int _year;int _month;int _day;
public://初始化void Init(int year, int month, int day){_year = year;_month = month;_day = day;}//打印变量void Print(){cout << _year << ' ' << _month << ' ' << _day << endl;}
};
//类的声明
class Date
{int _year;int _month;int _day;
public://初始化void Init(int year, int month, int day);//打印变量void Print();
};

一般类的声明是放在头文件中的,只不过这是为了方便而已。

我们发现:如果是声明,只要把函数定义换成函数声明就可以了。其他的不用变。

如果类的定义和声明分离,我们就需要用::指定类域,这个我们需要靠例子来说:

在Stack.h中包含类的声明:

//类的声明
class Stack
{
public://成员函数void Init(int n = 4);
private://成员变量int* arr;size_t capacity;size_t top;
};

在Test.cpp中包含类的定义:

#include"Stack.h"
void Stack::Init(int n)
{arr = (int*)malloc(sizeof(int) * n);if (arr == nullptr){perror("malloc申请空间失败");return ;}capacity = n;top = 0;
}

所以这就是指定类域的作用,其次定义中不能包含缺省参数!具体原因不要追究了!

2.实例化

2.1实例化概念

(1)用类类型在物理内存中创建对象的过程,称为类实例化对象;

如:我们创建了一个名字为Date的类,那么在主函数或者其他函数中加Date name;则Date name就是类实例化对象。

(2)类是对象进行的一种抽象描述,是一个模型一样的东西,限定了类有哪些成员变量,这些成员变量只有声明,没有分配空间,用类实例化对象时,才会分配空间。且一个类可以实例化多个对象。

简单理解就是:我们要建一个房子就需要设计图,而设计图还没有在土地上占地等等操作,而设计图可以建造出多个房子,这就相当于分配内存的过程就是国家批准你建设房子和电脑给你分配空间一样。

(3)一个类可以实例化多个对象。占用实际的物理空间,存储类成员变量。

我们在定义类的时候只是定义了还没分配空间,而实例化对象就是分配空间的过程。

2.2对象大小

C++和C语言一样要保持内存对齐的规则(这个自己去搜其他人写的博客,因为讲起来很麻烦而且比较难懂)。若Date d;这个Date就和之前的代码定义的Date一样。如果求sizeof(d);sizeof(Date)的值我们发现最终结果为12,也就是说除了三个成员变量占了空间,成员函数都没占空间。为什么呢?

首先函数在被编译后是一段指令,对象中无法存储,这些指令存储在一个单独的区域,如果对象一定要存储的话,只能为成员函数的指针。但没有必要存储指针,这样太费空间了。函数指针也不需要存储的,它是一个地址,调用时的编译链接阶段,就要找到函数的地址,而不是在运行时找,只有动态多态是在运行时找(之后会讲)。若实例化多个对象后,则调用函数都是一样的,所以就没必要存储起来,也就不需要占用空间了。而每一个实例化对象必然会有每个对象的变量的值改变,所以需要把变量存储起来而非函数。

3.this指针

一个类如果实例化多个对象,那么为何能保证出每一个对象的变量的精准打印和每一个对象的函数的精准调用呢?

这就是C++的比较好的一个点(放在最后讲)。因为有this指针的存在。

(1)编译器在编译后,类的成员函数默认都会在形参第一个位置增加一个当前类类型的指针即this指针。如:

//类的定义
class Date
{int _year;int _month;int _day;
public://初始化void Init(int year, int month, int day){_year = year;_month = month;_day = day;}//Init的真是原型为//void Init(Date* const this,int year,int month,int day)//打印变量void Print(){cout << _year << ' ' << _month << ' ' << _day << endl;}//Print真实原型为//void Print(Date* const this)
};
int main()
{//类的实例化(之后会讲)//这和结构体的差不多Date d;d.Init(2025, 4, 12);//真实调用传参是://d.Init(&d,2025,4,12)d.Print();//真实调用传参是://d.Print(&d)return 0;
}

所以就不会出现多个对象时每一个一样了。那为什么还能正常打印结果呢?没有this指针的解引用啊!

this指针不是简单的指针,它相当于类的指针,类比于结构体就是用->来得到里面的成员,而this->是在之后添上去的:

(2)类的成员函数访问成员变量,本质都是通过this指针来访问的。

实例化对象时会有一个地址产生,而this指针就是指向这个地址的,而这个地址刚好就包含了类里面的各个成员,然后传递给了this指针。且在成员函数都加上了this->就不许要我们自己来写了,如:

//类的实际
class Date
{int _year;int _month;int _day;
public://初始化void Init(Date* const this,int year, int month, int day){this->_year = year;this->_month = month;this->_day = day;}//Init的真是原型为//void Init(Date* const this,int year,int month,int day)//打印变量void Print(Date* const this){cout << this->_year << ' ' <<this-> _month << ' ' <<this-> _day << endl;}//Print真实原型为//void Print(Date* const this)
};

虽然这代码是报错的,但是我们只是理解这个this指针而已,我们不需要显式写成这样,且我们在函数参数第一个不要改为Date* const this,直接在变量前加->而且不要直接在成员变量定义时就进行this->了,我们是在调用函数时传的参数隐含了this而已。我们不在形参加Date* const this,因为这样会报错,但是我们只在函数调用成员变量时加this->是没有问题的。

为什么是Date* const而不是Date const*?

const有两种形式,第一种*在const前面,第二中*在const后面,前者const修饰this,代码this本身不可以修改,但是指针却可以修改;而后者则相反,我们是不想要this修改所以我们是这样写。

为什么这样就方便了呢?

我们之前用C语言时,总要传递一个指针来改变该点的值等等操作,而现在在这个this指针都隐含了,不需要我们自己去直接传参了,不仅不用创建一个额外的指针了,而且代码也变简单了!

4.练习

4.1选择题1

下面代码的运行结果是()?

A.编译报错     B.运行崩溃     C.正常运行

#include<iostream>
using namespace std;
class A
{
public:void Print(){cout << "A::Print()" << endl;}
private:int _d;
};
int main()
{A* p = nullptr;p->Print();return 0;
}

首先我们分析一下编译错误是语法错误,而里面没有语法错误,故不会报编译错误,所以不选A;

p->Print()实际转化出来的动作是call Print()

那p的作用是什么?

让编译器知道Print()在哪里,去A这个类里面去找。虽然是空指针,但不解引用,故不会报错,但是我们也要注意:p也会作为指针传给this,则会打印出this为00000000。故选C。

那么如果把cout<< "A::Print()"<<endl替换为cout<< _a <<endl呢?

从之前的分析直接把A排除掉,由于有空指针的解引用,则会使运行崩溃。相当于NULL->_a而我们是空指针的解引用。所以这时候选B。

4.2选择题2

this指针存在内存的哪个区域的()?

A、栈    B、堆    C、静态区    D、常量区    E、对象里面

不要想当然哦!

分析一下:E不能选!之前算对象大小时,没有算this指针(因为我们之后才讲的this指针),所以不能讯。

B堆不能选!堆是动态开辟空间才会用到,一般是malloc等动态开辟空间函数才会有,也不能选。

分析D:常量区就是不可修改的区域。我们要注意:const修饰的变量不一定放在常量区,C++中const修饰的是常变量,也可以修改!为什么?

我们在const char*用cout打印时为字符串,而不会打印地址,故要打印地址要么就用printf打印要么就cout<<(void*)str<<endl (str是const char* 类型的),所以是可以修改的(强制转换)。之后会讲具体原因,而只有const char* 才是存在常量区里面的(我不确定哦,是举个例子),而其他的则不是。D不能选。

那么就从A、C里面选。

C静态区是存常量、全局变量的地方,而this指针生命周期不是全局的,所以不能。

故选A堆。this指针相当于一个参数,是一个形参为局部变量,但有些编译器把this放到寄存器,这个就不要纠结了。

5.总结

类和对象上的知识不是很难,但是类和对象中的知识会让你爆炸的,这篇才6000字左右,而类和对象中我觉得至少12000字。但是也没有办法,如果喜欢的可以一键三连哦,下讲再见!

相关文章:

C++初阶-类和对象(上)

本章内容相对于之后的类和对象中和下都比较简单&#xff0c;但是整体还是有些难度的。 目录 1.类的定义 1.1类定义格式 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.练习 4.1选择题1 4.2选择题2 5.总结 1.类的定义 1.1类定义格式 &am…...

(十九)安卓开发中的Application类的使用详解

在 Android 开发中&#xff0c;Application 类是一个全局的单例类&#xff0c;代表应用进程本身。它常用于初始化全局资源、维护应用级别的状态和注册全局生命周期回调。以下是详细讲解和代码示例&#xff1a; 一、自定义 Application 类 1. 创建子类 public class MyApplica…...

算法思想之位运算(一)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之位运算(一) 发布时间&#xff1a;2025.4.12 隶属专栏&#xff1a;算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题位1的个数题目链接题目描述算法思路代码实现 比特位计数题目链接题目描述…...

十八、TCP多线程、多进程并发服务器

1、TCP多线程并发服务器 服务端&#xff1a; #include<stdio.h> #include <arpa/inet.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <pthread.h>…...

『生成内容溯源系统』详解

生成内容溯源系统详解 1. 定义与核心目标 生成内容溯源系统&#xff08;Generative Content Provenance System&#xff09;是指能够追踪AI生成内容的来源、生成过程、版权归属及修改历史的技术体系。其核心目标是&#xff1a; 验证真实性&#xff1a;证明内容由特定AI模型生…...

mac 解压 nsz 文件

nsz 地址 下载 nsz PIP 套餐 使用以下命令安装仅限 Console 的版本&#xff1a; pip3 install --upgrade nsz使用以下命令安装 GUI 版本&#xff1a; pip3 install --upgrade nsz[gui]解压 nsz 文件 nsz -D 文件路径...

Python进阶(3):函数(接上篇)

上一篇我们初步介绍python中函数的定义与调用 Python进阶(2):函数-CSDN博客 这里继续: 关键字参数: 形参1实参1,形参2实参2,...... 关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确…...

卒/兵过河前的判断和走法触发器优化

兵(卒)&#xff1a;兵(卒)在未过河前&#xff0c;只能向前一步步走&#xff0c;过河以后&#xff0c;除不能后退外&#xff0c;允许左右移动&#xff0c;但也只能一次一步。 迷你世界地图已上传 优化...

生物信息Rust-01

前言-为什么想学Rust&#xff1f; 一直想多学一门编译语言&#xff0c;主要有几个原因吧&#xff08;1. 看到一位老师实验室要求需要掌握一门编译语言&#xff1b;2. 自己享想试着开发一些实用的生信工具&#xff0c;感觉自己现在相比于数据分析&#xff0c;探索生物学层面的意…...

基于HTML + jQuery + Bootstrap 4实现(Web)地铁票价信息生成系统

地铁票价信息表生成系统 1. 需求分析 1.1 背景 地铁已经成为大多数人出行的首选,北京地铁有多条运营线路, 截至 2019 年 12 月,北京市轨道交通路网运营线路达 23 条、总里程 699.3 公里、车站 405 座。2019 年,北京地铁年乘客量达到 45.3 亿人次,日均客流为 1241.1 万人次…...

智慧水务项目(八)基于Django 5.1 版本PyScada详细安装实战

一、说明 PyScada&#xff0c;一个基于Python和Django框架的开源SCADA&#xff08;数据采集与监视控制系统&#xff09;系统&#xff0c;采用HTML5技术打造人机界面&#xff08;HMI&#xff09;。它兼容多种工业协议&#xff0c;如Modbus TCP/IP、RTU、ASCII等&#xff0c;并具…...

DeepSeek在消防救援领域的应用解决方案

DeepSeek在消防救援领域的应用解决方案 一、火灾风险动态感知与早期预警 火灾风险动态感知与早期预警是智慧消防的关键环节&#xff0c;DeepSeek通过多模态数据分析&#xff0c;融合烟雾传感器、热成像摄像头和气体浓度检测等数据&#xff0c;能够识别传统阈值法难以捕捉的火…...

VSCode CMake调试CPP程序

文章目录 1 安装C与CMake插件2 配置CMakeLists.txt3 使用CMake编译调试3.1 编译3.2 调试 4 自定义构建调试参考 1 安装C与CMake插件 C插件 CMake插件 2 配置CMakeLists.txt 编写测试程序 #include<iostream>int main(int argc, char const *argv[]) {int a 1, b 2;i…...

AI Agent工程师认证-学习笔记(3)——【多Agent】MetaGPT

学习链接&#xff1a;【多Agent】MetaGPT学习教程 源代码链接&#xff08;觉得很好&#xff0c;star一下&#xff09;&#xff1a;GitHub - 基于MetaGPT的多智能体入门与开发教程 MetaGPT链接&#xff1a;GitHub - MetaGPT 前期准备 1、获取MetaGPT &#xff08;1&#xff…...

Spring AI 结构化输出详解

一、Spring AI 结构化输出的定义与核心概念 Spring AI 提供了一种强大的功能&#xff0c;允许开发者将大型语言模型&#xff08;LLM&#xff09;的输出从字符串转换为结构化格式&#xff0c;如 JSON、XML 或 Java 对象。这种结构化输出能力对于依赖可靠解析输出值的下游应用程…...

AMGCL库使用示例

AMGCL库使用示例 AMGCL是一个用于解决大规模稀疏线性方程组的C库&#xff0c;它实现了代数多重网格(AMG)预处理器和Krylov子空间迭代求解器。下面是一些AMGCL的使用示例。 基本示例&#xff1a;求解稀疏线性系统 #include <iostream> #include <vector> #includ…...

关于 Java 预先编译(AOT)技术的详细说明,涵盖 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及优缺点对比

以下是关于 Java 预先编译&#xff08;AOT&#xff09;技术的详细说明&#xff0c;涵盖 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及优缺点对比&#xff1a; 1. 预先编译&#xff08;AOT&#xff09;技术详解 1.1 核心概念 AOT&#xff08;Ahead-of-Time&#xff09…...

Video Encoder:多模态大模型如何看懂视频

写在前面 大型语言模型(LLM)已经掌握了理解文本的超能力,而多模态大模型(MLLM)则更进一步,让 AI 拥有了“看懂”图像的眼睛。但这还不够!真实世界是动态的、流动的,充满了运动、变化和声音。视频,正是承载这一切动态信息的关键媒介。 让 LLM 看懂视频,意味着 AI 需…...

leetcode0622. 设计循环队列-medium

1 题目&#xff1a;设计循环队列 官方标定难度&#xff1a;中 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一…...

专题十四:动态路由——OSPF

一、OSPF简介 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;采用DIjkstra算法&#xff0c;协议号是89。用于自治系统&#xff08;A…...

【蓝桥杯】第十六届蓝桥杯 JAVA B组记录

试题 A: 逃离高塔 很简单&#xff0c;签到题&#xff0c;但是需要注意精度&#xff0c;用int会有溢出风险 答案&#xff1a;202 package lanqiao.t1;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWrit…...

一个项目的架构演进

1&#xff0c;单体架构 垂直升级&#xff1a;4核16GB -> 8核64G 水平扩展&#xff1a;一台服务器扩展成多台 存在以下几个问题 1&#xff0c;提升的性能是有限的 2&#xff0c;更新&#xff0c;维护成本非常高&#xff0c;对于系统中要修改或增加的功能&#xff0c;整个发…...

创建虚拟环境无法加载到pycharm当conda环境,只能为python环境

conda create -n myenv python3.8 然后&#xff0c;在pycharm中&#xff0c;点击 ..." 按钮并浏览到您的 Conda 环境路径。通常&#xff0c;Conda 环境路径位于 ~/.conda/envs/<Your Environment Name> 或 ~/miniconda3/envs/<Your Environment Name> 或 ~/an…...

暴雨打造智能化时代源动力

当清晨的智能管家为您调节室温、日间数字员工自动生成会议纪要、深夜AI外教仍在纠正发音……这不是科幻片&#xff0c;2025年的世界正被智能体悄然重塑。这些能听会想的数智化助理&#xff0c;正在医疗会诊、工业质检、金融风控等多个领域创造着价值。 那么&#xff0c;智能体…...

【ROS2】行为树:BehaviorTree

1、简介 与状态机不同,行为树强调执行动作,而不是状态之间的转换。 行为树是可组合的。可以重复使用简单的行为来构建复杂的行为。 在游戏领域,行为树已经比较流行了。主要用于维护游戏角色的各种动作和状态。 ROS2的导航框架Navigation2中引入了行为树来组织机器人的工作流…...

【HTTP】:应用层协议HTTP(1)

1.HTTP协议 虽然我们说,应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用.HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c;HTTP&#xff08;HyperTextTransfer Protocol&#xff0c;超文本…...

Boost Graph Library (BGL) 介绍与使用示例

Boost Graph Library (BGL) 介绍与使用示例 Boost Graph Library (BGL) 是 Boost 库中用于图论计算的模块&#xff0c;提供了处理图数据结构的通用接口和多种图算法实现。 BGL 主要特性 提供多种图表示方式&#xff1a;邻接表、邻接矩阵等包含常用图算法&#xff1a;DFS、BF…...

数据结构--线性表

单链表的基本操作 1.清空单链表 链表仍然存在&#xff0c;但链表中无元素&#xff0c;成为空链表&#xff08;头指针和头链表仍存在&#xff09;算法思路&#xff1a;依次释放所有结点&#xff0c;并将头结点指针设置为空 2.返回表长 3.取值–取单链表中第i个元素 因为存储…...

电商用户购物行为分析:基于K-Means聚类与分类验证的完整流程

随着电商行业的快速发展,用户行为分析成为企业优化营销策略、提升用户体验的重要手段。通过分析用户的购物行为数据,企业可以挖掘出用户群体的消费特征和行为模式,从而制定更加精准的营销策略。本文将详细介绍一个基于Python实现的电商用户购物行为分析系统,涵盖数据预处理…...

《车辆人机工程-汽车驾驶显示装置》实验报告

汽思考题 汽车显示装置有哪些&#xff1f; 汽车显示装置是车辆与驾驶员、乘客交互的重要界面&#xff0c;主要用于信息展示、功能控制和安全辅助。以下是常见的汽车显示装置分类及具体类型&#xff1a; 一、驾驶舱核心显示装置 1. 仪表盘&#xff08;Instrument Cluster&am…...

三维点云投影二维图像的原理及实现

转自个人博客&#xff1a;三维点云投影二维图像的原理及实现 1. 概述 1.1 原理概述 三维点云模型是由深度相机采集深度信息和RGB信息进行生成的&#xff0c;深度相机能直接获取到深度图和二维RGB图像&#xff0c;也就是说利用相机原本的关系就可以把深度信息投影回二维图像&a…...

使用Golang打包jar应用

文章目录 背景Go 的 go:embed 功能介绍与打包 JAR 文件示例1. go:embed 基础介绍基本特性基本语法 2. 嵌入 JAR 文件示例项目结构代码实现 3. 高级用法&#xff1a;嵌入多个文件或目录4. 使用注意事项5. 实际应用场景6. 完整示例&#xff1a;运行嵌入的JAR 背景 想把自己的一个…...

MySQL数据过滤、转换与标准化

数据处理是数据库操作的重要组成部分&#xff0c;尤其是在大量数据中查找、转换和规范化目标信息的过程中。为了确保数据的有效性与一致性&#xff0c;MySQL提供了一系列数据过滤、转换与标准化的功能。 本教程将深入探讨数据过滤和转换的基本方法及应用&#xff0c;内容涵盖数…...

Linux中安装sentinel

拉取镜像 #我默认拉取最新的 sentinel 镜像 docker pull bladex/sentinel-dashboard 创建容器 docker run --name sentinel -d -p 8858:8858 bladex/sentinel-dashboard 检查是否成功 docker ps 浏览器访问 默认账号密码是 sentinel/sentinel 成功了 开放sentinel端口或者关…...

大模型压缩训练(知识蒸馏)

AI的计算结果不是一个数值&#xff0c;而是一个趋势 一、模型压缩简介 1、深度学习&#xff08;Deep Learning&#xff09;因其计算复杂度或参数冗余&#xff0c;在一些场景和设备上限制了相应的模型部署&#xff0c;需要借助模型压缩、优化加速、异构计算等方法突破瓶颈。 …...

Matlab绘制函数方程图形

Matlab绘制函数方程图形&#xff1a; 多项式计算: polyval 函数 Values of Polynomials: polyval ( ) 绘制方程式图形&#xff1a; 代码如下&#xff1a; >> a[9,-5,3,7]; x-2:0.01:5; fpolyval(a,x); plot(x,f,LineWidth,2); xlabel(x); ylabel(f(x))…...

dify windos,linux下载安装部署,提供百度云盘地址

dify下载安装 dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码…...

优化方法介绍(一)

优化方法介绍(一) 本博客是一个系列博客,主要是介绍各种优化方法,使用 matlab 实现,包括方法介绍,公式推导和优化过程可视化 1 失败案例介绍 本文在编写最速下降法的时候使用了经典的求解函数框架,并使用了自适应步长(alpha)机制,即加入参数flag,当出现梯度下降的情…...

Centos7.9 升级内核,安装RTX5880驱动

系统镜像下载 https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 系统安装步骤省略 开始安装显卡驱动 远程登录查看内核 [root192 ~]# uname -a Linux 192.168.119.166 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x8…...

计算轴承|滚动轴承故障频率

一、轴承故障频率概述 在旋转机械故障诊断中&#xff0c;轴承故障频率&#xff08;BPFO、BPFI、BSF、FTF&#xff09;是重要的分析依据。通过计算这些特征频率&#xff0c;可以帮助工程师&#xff1a; 识别轴承故障类型&#xff08;内圈/外圈/滚动体故障&#xff09;制定振动…...

Python 数据分析01 环境搭建教程

Python 数据分析01 环境搭建教程 一、安装 Python 环境 访问 Python 官方网站 Python 官网&#xff0c;选择适合你操作系统的 Python 版本进行下载。下载完成后&#xff0c;运行安装程序。在安装过程中&#xff0c;建议选择“Add Python to PATH”选项&#xff0c;这样可以在…...

程序化广告行业(80/89):近年发展动态与技术标准演进

程序化广告行业&#xff08;80/89&#xff09;&#xff1a;近年发展动态与技术标准演进 大家好&#xff01;在技术领域探索的过程中&#xff0c;我深刻认识到知识分享的力量&#xff0c;它能让我们在学习的道路上加速前行。写这篇博客&#xff0c;就是希望能和大家一起深入剖析…...

Node.js cluster模块详解

Node.js cluster 模块详解 cluster 模块允许你轻松创建共享同一服务器端口的子进程&#xff08;worker&#xff09;&#xff0c;充分利用多核 CPU 的性能。它是 Node.js 实现高并发的重要工具。 核心概念 主进程&#xff08;Master&#xff09;&#xff1a;负责管理工作进程…...

2025年认证杯数学建模C题完整分析论文(共39页)(含模型、可运行代码)

2025年认证杯数学建模竞赛C题完整分析论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1解析 4.1.2问题1模型建立 4.1.3问题1求解代码 4.1.4问题1求解结果 4.2问题2 4.2.1问题2解析 4.2.2问题2模型建…...

PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令 PostgreSQL 的 COPY 命令是高效数据导入导出的核心工具&#xff0c;性能远超常规 INSERT 语句。以下是 COPY 命令的深度解析&#xff1a; 一 COPY 命令基础 1.1 基本语法对比 命令类型语法示例执行位置文件访问权限服务器端COPYCOPY table FROM /p…...

MySQL进阶-存储引擎索引

目录 一&#xff1a;存储引擎 MySQL体系结构 存储引擎介绍 存储引擎特点 InnoDB MyISAM Memory 区别及特点 存储引擎选择 索引 索引概述 介绍 演示 特点 索引结构 概述 二叉树 B-Tree BTree Hash 索引分类 索引分类 聚集索引&二级索引 一&#xff1…...

为什么需要Refresh Token?

后端服务性能 一种方案是在服务器端保存 Token 状态&#xff0c;用户每次操作都会自动刷新&#xff08;推迟&#xff09; Token 的过期时间——Session 就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题&#xff0c;在前后端分离、单页 App 这些情况下&#x…...

基于3A4000及CentOS的银河麒麟V10离线源码编译安装VLC

碰到过的一个具体问题&#xff1a; 源码安装vlc-3.0.x版本&#xff0c;需要注意的是&#xff0c;不要安装ffmpeg-5及以上的版本&#xff0c;即只支持ffmpeg-4的版本&#xff0c;因此&#xff0c;要安装vlc-3.0版本&#xff0c;一个重要的依赖时就会ffmpeg-4。报错没有revision…...

Windows for Redis 后台服务运行

下载 redis 安装包 地址&#xff1a;https://github.com/tporadowski/redis/releases 解压zip压缩包&#xff0c;执行 redis-server.exe 即可以窗口模式运行&#xff08;窗口关闭则服务关闭&#xff09; 运行窗口可以看到&#xff0c;端口是 6379 我这里使用 nvaicat 客服端测…...

前端工程化-包管理NPM-package.json 和 package-lock.json 详解

package.json 和 package-lock.json 详解 1.package.json 基本概念 package.json 是 Node.js 项目的核心配置文件&#xff0c;它定义了项目的基本信息、依赖项、脚本命令等。 主要字段 基本信息字段 name: 项目名称&#xff08;必填&#xff09; version: 项目版本&#xf…...