2023/9/12 -- C++/QT
作业
实现一个图形类(Shape),包含受保护成员属性:周长、面积,
公共成员函数:特殊成员函数书写
定义一个圆形类(Circle),继承自图形类,包含私有属性:半径
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。
03hmwk.h:
#ifndef __03HMWK_H__
#define __03HMWK_H__#include <iostream>
#define PI 3.14
using namespace std;class Shape{
protected:double circumference;double size;
public://无参构造Shape();//有参构造Shape(double c,double s);//析构~Shape();//拷贝构造Shape(const Shape &other);
// //移动构造
// Shape(Shape && other);//拷贝赋值Shape & operator=(const Shape &other);
// //移动赋值
// Shape & operator=(Shape && other);
};class Circle:public Shape{
private:double radius;
public://无参构造Circle();//有参构造Circle(double r);//析构~Circle();//拷贝构造Circle(const Circle &other);
// //移动构造
// Circle(Circle && other);//拷贝赋值Circle & operator=(const Circle &other);
// //移动赋值
// Circle & operator=(Circle && other);//获取周长double get_C();//获取面积double get_S();
};class Rectangle:public Shape{
private:double length;double width;
public://无参构造Rectangle();//有参构造Rectangle(double l,double w);//析构~Rectangle();//拷贝构造Rectangle(const Rectangle &other);
// //移动构造
// Rectangle(Rectangle && other);//拷贝赋值Rectangle & operator=(const Rectangle &other);
// //移动赋值
// Rectangle & operator=(Rectangle && other);//获取周长double get_C();//获取面积double get_S();
};#endif // 03HMWK_H
03hmwk.cpp:
#include <03hmwk.h>
//无参构造
Shape::Shape():circumference(0),size(0){cout<<"Shape::无参构造"<<endl;
}
//有参构造
Shape::Shape(double c,double s):circumference(c),size(s){cout<<"Shape::有参构造"<<endl;
}
//析构
Shape::~Shape(){cout<<"Shape::析构"<<endl;
}
//拷贝构造
Shape::Shape(const Shape &other):circumference(other.circumference),size(other.size){cout<<"Shape::拷贝构造"<<endl;
}
移动构造
//Shape::Shape(Shape && other):circumference(other.circumference),size(other.size){
// cout<<"Shape::移动构造"<<endl;
//}
//拷贝赋值
Shape & Shape::operator=(const Shape &other){if(this != &other){circumference = other.circumference;size = other.size;}cout<<"Shape::拷贝赋值"<<endl;return *this;
}
移动赋值
//Shape & Shape::operator=(Shape && other){
// circumference = other.circumference;
// size = other.size;
// cout<<"Shape::移动赋值"<<endl;
// return *this;
//}/**********************************圆*************************************************///无参构造
Circle::Circle():Shape(0,0),radius(0){cout<<"Circle::无参构造"<<endl;
}
//有参构造
Circle::Circle(double r):Shape(2*PI*r,PI*r*r),radius(r){cout<<"Circle::有参构造"<<endl;
}
//析构
Circle::~Circle(){cout<<"Circle::析构"<<endl;
}
//拷贝构造
Circle::Circle(const Circle &other):Shape(other),radius(other.radius){cout<<"Circle::拷贝构造"<<endl;
}
移动构造
//Circle::Circle(Circle && other):Shape(other),radius(other.radius){
// cout<<"Circle::移动构造"<<endl;
//}
//拷贝赋值
Circle & Circle::operator=(const Circle &other){if(this != &other){Shape::operator=(other);radius = other.radius;}cout<<"Circle::拷贝赋值"<<endl;return *this;
}
移动赋值
//Circle & Circle::operator=(Circle && other){
// (Shape)other = Shape(other);
// radius = other.radius;
// cout<<"Circle::移动赋值"<<endl;
// return *this;
//}
//获取周长
double Circle::get_C(){return circumference;
}
//获取面积
double Circle::get_S(){return size;
}/***********************************矩形************************************************///无参构造
Rectangle::Rectangle():Shape(0,0),length(0),width(0){cout<<"Rectangle::无参构造"<<endl;
}
//有参构造
Rectangle::Rectangle(double l,double w):Shape(2*(l+w),l*w),length(l),width(w){cout<<"Rectangle::有参构造"<<endl;
}
//析构
Rectangle::~Rectangle(){cout<<"Rectangle::析构"<<endl;
}
//拷贝构造
Rectangle::Rectangle(const Rectangle &other):Shape(other),length(other.length),width(other.width){cout<<"Rectangle::拷贝构造"<<endl;
}
移动构造
//Rectangle::Rectangle(Rectangle && other):Shape(other),length(other.length),width(other.width){
// cout<<"Rectangle::移动构造"<<endl;
//}
//拷贝赋值
Rectangle & Rectangle::operator=(const Rectangle &other){if(this != &other){Shape::operator=(other);length = other.length;width = other.width;}cout<<"Rectangle::拷贝赋值"<<endl;return *this;
}
移动赋值
//Rectangle & Rectangle::operator=(Rectangle && other){
// (Shape)other = Shape(other);
// length = other.length;
// width = other.width;
// cout<<"Rectangle::移动赋值"<<endl;
// return *this;
//}
//获取周长
double Rectangle::get_C(){return circumference;
}
//获取面积
double Rectangle::get_S(){return size;
}
main.cpp:
#include <03hmwk.h>int main()
{Circle c1(5);cout<<"c1.C = "<<c1.get_C()<<endl;cout<<"c1.S = "<<c1.get_S()<<endl;Rectangle r1(5,4);cout<<"r1.C = "<<r1.get_C()<<endl;cout<<"r1.S = "<<r1.get_S()<<endl;Circle c2 = c1;cout<<"c2.C = "<<c2.get_C()<<endl;cout<<"c2.S = "<<c2.get_S()<<endl;Rectangle r2 = r1;cout<<"r2.C = "<<r2.get_C()<<endl;cout<<"r2.S = "<<r2.get_S()<<endl;Circle c3;c3 = c2;cout<<"c3.C = "<<c3.get_C()<<endl;cout<<"c3.S = "<<c3.get_S()<<endl;Rectangle r3;r3 = r2;cout<<"r3.C = "<<r3.get_C()<<endl;cout<<"r3.S = "<<r3.get_S()<<endl;
// Circle c4 = move(c3);
// cout<<"c4.C = "<<c4.get_C()<<endl;
// cout<<"c4.S = "<<c4.get_S()<<endl;
// Rectangle r4 = move(r3);
// cout<<"r4.C = "<<r4.get_C()<<endl;
// cout<<"r4.S = "<<r4.get_S()<<endl;
// Circle c5;
// c5 = move(c4);
// cout<<"c5.C = "<<c5.get_C()<<endl;
// cout<<"c5.S = "<<c5.get_S()<<endl;
// Rectangle r5;
// r5 = move(r4);
// cout<<"r5.C = "<<r5.get_C()<<endl;
// cout<<"r5.S = "<<r5.get_S()<<endl;return 0;
}
效果图:
一、静态成员(static)
程序员有时在实例化对象时,想让某个成员或某几个成员独立于类对象而存在,但是又属于类对象的属性,不占用类对象的空间,那么此时我们可以将这些成员设置成静态成员,相当于在类体内定义一个全局的成员。静态成员分为静态成员变量和静态成员函数。
1.1 静态成员变量
- 定义格式:在定义成员变量时,在前面加关键字static,那么该变量就是静态成员变量
- 静态成员变量一般声明成public权限,并且需要在类内声明,类外定义,定义时如果不初始化,默认为0,
- 静态成员变量,不依附于类对象而存在,不占用类对象的空间,在编译时,系统在静态区为其分配空间
- 静态成员变量也是每个类对象拥有的属性,一个对象对其更改,所有对象的该属性都会更改
- 使用方式:每个类对象都可以使用成员运算符进行调用,也可以通过类名加作用域限定符直接调用
- 静态成员变量,从功能上来说相当于全局变量,但是相比于全局变量更能体现类的封装性
#include <iostream>using namespace std;
class Stu
{
private:int age;
public:static int score; //在类内声明Stu() {}
};//在类外定义一下静态成员变量
int Stu::score = 100;int main()
{Stu::score = 50; //通过 类名直接访问类中的静态成员变量Stu s;cout<<"score = "<<s.score<<endl;cout<<"sizeof s = "<<sizeof (s)<<endl; //4字节,静态成员变量不占用类对象的空间Stu s1;cout<<"score = "<<s1.score<<endl; //100Stu s2;s2.score = 90; //一个对象的该值进行改变,所有对象的该值都跟着改变cout<<"score = "<<s.score<<endl;cout<<"score = "<<s1.score<<endl;return 0;
}
1.2 静态成员函数
- 定义格式:在定义成员函数前加关键static,那么该函数就是静态成员函数
- 静态成员函数相当于在类体中定义一个全局函数,但是,只能是该类对象或者该类进行调用
- 静态成员函数的调用:可以使用类对象通过成员运算符进行调用也可以使用类名直接进行调用
- 静态成员函数中,没有this指针
- 静态成员函数,不依赖于类对象而存在,所以也可以不实例化对象,直接使用类名进行调用
- 在静态成员函数中,只能使用静态成员变量不能使用非静态成员变量
#include <iostream>using namespace std;
class Stu
{
private:int age;
public:static int score; //在类内声明Stu() {}Stu(int a):age(a) {}//该函数是静态成员函数static void show(){//cout<<"age = "<<age<<endl; //在静态成员函数中不能使用非静态成员变量cout<<"score = "<<score<<endl; //可以使用静态成员变量}//静态成员函数和同名的非静态成员函数不构成重载关系,原因是作用域不同
// void show()
// {
// cout<<"age = "<<age<<endl; //在静态成员函数中不能使用非静态成员变量
// cout<<"score = "<<score<<endl; //可以使用静态成员变量
// }
};//在类外定义一下静态成员变量
int Stu::score = 100;int main()
{Stu::score = 50; //通过 类名直接访问类中的静态成员变量Stu s;cout<<"score = "<<s.score<<endl;cout<<"sizeof s = "<<sizeof (s)<<endl; //4字节,静态成员变量不占用类对象的空间Stu s1;cout<<"score = "<<s1.score<<endl; //100Stu s2;s2.score = 90; //一个对象的该值进行改变,所有对象的该值都跟着改变cout<<"score = "<<s.score<<endl;cout<<"score = "<<s1.score<<endl;cout<<"********************************************************"<<endl;Stu s3(18);s3.show(); //通过类对象调用静态成员函数Stu::show(); //通过函数名直接调用静态成员函数return 0;
}
二、继承(inherit)
2.1 继承的概念
1> 所谓继承,就是在一个类的基础上去定义另一个新类的过程叫做继承
2> 作用:
- 继承能够提高代码的复用性
- 继承是实现多态的必要条件
2.2 继承格式
class 子类名:继承方式 父类名
{//子类拓展的成员
}
继承方式有三种:public、protected、private子类:也叫派生类
父类:也叫基类
2.3 继承方式对类中成员的权限的影响
父类中 public|protected|private|不能访问 public|protected|private|不能访问 public|protected|private|不能访问
继承方式 public protected private
子类中 public|protected|不能访问|不能访问 protected|protected|不能访问|不能访问 private|private|不能访问|不能访问
总结:
- 所谓继承方式,其实就是父类中的成员的访问权限在子类中的最高权限
- 如果继承过程中没有加访问权限,默认是私有继承
- 常用的继承方式是public
- 在所有继承方式中,都不能在子类中访问父类的私有成员以及父类不能访问的成员
2.4 子类会继承父类中的所有成员
1> 子类会继承父类中的所有成员,包括私有成员,只是私有成员不能访问而已
2> 父类和子类是不同的类
3> 为了对子类从父类中继承下来成员进行初始化工作,需要在子类的构造函数初始化列表中显性调用父类的有参构造完成,否则系统会自动调用父类的无参构造,此时,如果父类没有无参构造,则系统报错
4> 在这个过程中,虽然调用了父类的构造函数,但是,并没有实例化一个父类对象
#include <iostream>using namespace std;class Person
{
public:string name;
protected:int value;
private:double money; //私房钱public:Person() {cout<<"Person::无参构造"<<endl;}Person(string n, int v, double m):name(n),value(v),money(m) {cout<<"Person::有参构造"<<endl;}void show(){cout<<"Person::name = "<<name<<endl; //自己类中的公有成员,自己类内可以访问cout<<"Person::value = "<<value<<endl; //自己类中的受保护成员,自己类内可以访问cout<<"Person::money = "<<money<<endl; //自己类中的私有成员,自己类内可以访问}
};//定义一个员工类,继承自人类
class Worker:public Person //公有继承
/*class Worker:protected Person*/ //受保护继承
//class Worker:private Person
{
private:double salary; //工资public:Worker() {cout<<"Worker::无参构造"<<endl;}//需要在子类的构造函数中显性调用父类的有参构造完成对子类从父类中继承下来的成员的初始化Worker(string n, int v, double m, double s):Person(n,v,m), salary(s){
// name = n;
// value = v;
// money = m;cout<<"Worker::有参构造"<<endl;}void display(){cout<<"Worker::name = "<<name<<endl; //继承下来的公有成员,子类中还是公有成员,子类内可以访问cout<<"Worker::value = "<<value<<endl; //继承下来的受保护成员,子类中还是受保护成员,子类内可以访问//cout<<"Worker::money = "<<money<<endl; //继承下来的父类私有成员,子类中不可访问cout<<"Worker::salary = "<<salary<<endl; //自己的私有成员,类内可以访问}
};int main()
{//cout << sizeof(Worker) << endl;// Worker w;// cout<<"w.name = "<<w.name<<endl; //继承下来的公有成员,子类中也是公有的,类外可以被访问// cout<<"w.value = "<<w.value<<endl; //继承下来的受保护成员,子类中也是受保护的,子类外不能被访问
// cout<<"w.money = "<<w.money<<endl; //继承下来的私有成员,子类中不能被访问,类外不能被访问
// cout<<"w.salary = "<<w.salary<<endl; //子类的私有成员,子类外无法访问Worker w1("zhangpp", 520, 1, 100);w1.display();w1.show();return 0;
}
2.5 类的关系模型
1> has - a模型
包含关系,一个类中包含另一个类的成员对象
2> use - a模型
友元关系,将某个类设置成友元,那么另一个类就可以使用自己的所有权限下的成员
3> is - a模型
继承关系,并且,is-a模型是特殊的has-a模型
2.6 类的继承步骤
1> 全盘吸收父类
2> 改造父类:继承方式、通过using关键字改变
3> 拓展新成员
#include <iostream>using namespace std;class Person
{
public:string name;
protected:int salary;
private:int money;
public:Person() {}
};//定义学生类继承自Person
class Stu:public Person
{
protected:using Person::name; //将继承的name的权限更改成受保护权限public:using Person::salary; //将继承的salary权限更改成公共权限//using Person::money; //父类的私有成员不能进行改造double score; //拓展新成员public:Stu() {}};int main()
{Stu s;//s.name = "hello";//s.salary = 1000;return 0;
}
相关文章:

2023/9/12 -- C++/QT
作业 实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性…...

【Purple Pi OH RK3566鸿蒙开发板】OpenHarmony音频播放应用,真实体验感爆棚!
本文转载于Purple Pi OH开发爱好者,作者ITMING 。 原文链接:https://bbs.elecfans.com/jishu_2376383_1_1.html 01注意事项 DevEco Studio 4.0 Beta2(Build Version: 4.0.0.400) OpenHarmony SDK API 9 创建工程类型选择Appli…...
Android rom开发:9.0系统上实现4G wifi 以太网共存
framework层修改网络优先级,4G > wifi > eth 修改patch如下: diff --git a/frameworks/base/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/frameworks/base/services/core/java/com/android/server/connectivit…...
高速自动驾驶HMI人机交互
概述 目的 本文档的目的是描述高速自动驾驶功能涉及的HMI显示需求技术规范和设计说明。 范围 术语及缩写 设计与实验标准 设计标准 设计标准-非法规类设计标准-法规类 HMI交互需求 CL4功能界面 HMI显示器[伊1] 中应包含CL4功能设置界面,提供给用户进行设置操作或显…...
【自然语言处理】关系抽取 —— SOLS 讲解
SOLS 论文信息 标题:Speaker-Oriented Latent Structures for Dialogue-Based Relation Extraction 作者:Guoshun Nan, Guoqing Luo, Sicong Leng, Yao Xiao, Wei Lu 发布时间与更新时间:2021.09.11 主题:自然语言处理、关系抽取、对话场景、跨语句、DialogRE、GCN arXiv:…...

周易算卦流程c++实现
代码 #include<iostream> using namespace std; #include<vector> #include<cstdlib> #include<ctime> #include<Windows.h>int huaYiXiangLiang(int all, int& left) {Sleep(3000);srand(time(0));left rand() % all 1;while (true) {if…...

软件架构设计(十三) 构件与中间件技术
中间件的定义 其实中间件是属于构件的一种。是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同技术之间共享资源。 我们把它定性为一类系统软件,比如我们常说的消息中间件,数据库中间件等等都是中间件的一种体现。一般情况都是给应用系统提供服务,而不是直接…...

PyTorch深度学习实战——基于ResNet模型实现猫狗分类
PyTorch深度学习实战——基于ResNet模型实现猫狗分类 0. 前言1. ResNet 架构2. 基于预训练 ResNet 模型实现猫狗分类相关链接 0. 前言 从 VGG11 到 VGG19,不同之处仅在于网络层数,一般来说,神经网络越深,它的准确率就越高。但并非…...

机器学习第六课--朴素贝叶斯
朴素贝叶斯广泛地应用在文本分类任务中,其中最为经典的场景为垃圾文本分类(如垃圾邮件分类:给定一个邮件,把它自动分类为垃圾或者正常邮件)。这个任务本身是属于文本分析任务,因为对应的数据均为文本类型,所以对于此类任务我们首先…...

基于Java+SpringBoot+Vue的图书借还小程序的设计与实现(亮点:多角色、点赞评论、借书还书、在线支付)
图书借还管理小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 小…...

【校招VIP】前端计算机网络之UDP相关
考点介绍 UDP是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可…...

前缀和实例4(和可被k整除的子数组)
题目: 给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1: 输入:nums [4,5,0,-2,-3,1], k 5 输出:7 …...

Android获取系统读取权限
第一步在Androidifest.xml文件中加上授权语句 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>并且在Application标签下添加 androi…...

输入学生成绩(最多不超过40),输入为负值时表示输入结束,统计成绩高于平均成绩的学生人数
#include<stdio.h> #define N 40 int scanfscore(int score[N]) {int i -1;do {i;printf("输入学生成绩:");scanf("%d", &score[i]);} while (score[i] > 0);return i; } int average(int score[N], int n) {int j 0;int k 0;double sum …...

【力扣周赛】第 363 场周赛(完全平方数和质因数分解)
文章目录 竞赛链接Q1:100031. 计算 K 置位下标对应元素的和竞赛时代码写法2——手写二进制中1的数量 Q2:100040. 让所有学生保持开心的分组方法数(排序后枚举分界)竞赛时代码 Q3:100033. 最大合金数(二分答…...

RocketMQ的介绍和环境搭建
一、介绍 我也不知道是啥,知道有什么用、怎么用就行了,说到mq(MessageQueue)就是消息队列,队列是先进先出的一种数据结构,但是RocketMQ不一定是这样,简单的理解一下,就是临时存储的…...

【web开发】7、Django(2)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、部门列表二、部门管理(增删改)三、用户管理过渡到modelform组件四、modelform实例:靓号操作五、自定义分页组件六、datepick…...

Prometheus+Grafana可视化监控【Nginx状态】
文章目录 一、安装Docker二、安装Nginx(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装nginx_exporter七、Grafana添加Nginx监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果已经有D…...

R 语言的安装教程
一、下载相关软件 1、R 下载 官网:R: The R Project for Statistical Computing 找到中国镜像,下载快 历史版本点击这里 2、Rtools 下载 进入镜像后,点击这里 然后选择与上面下载的R版本相对应的版本即可 3、Rstudio 下载 官网࿱…...

uniapp-提现功能(demo)
页面布局 提现页面 有一个输入框 一个提现按钮 一段提现全部的文字 首先用v-model 和data内的数据双向绑定 输入框逻辑分析 输入框的逻辑 为了符合日常输出 所以要对输入框加一些条件限制 因为是提现 所以对输入的字符做筛选,只允许出现小数点和数字 这里用正则实现的小数点…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...