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

类和对象plus版

一.类的定义

1.1类定义的格式

d94db1db45d84f4aa564a6719f0ce4d8.png

 图中class为关键字,Stack为类的名字,用{}框住类的主体,类定义完后;不能省略。

为了区分成员变量,一般习惯在成员变量前面或后面加一个特殊标识,_或者m_

3473d65bf0994c5a948296d7f5156d86.png

 1.2访问限定符

c++采用一种封装的方式,用类和对象的属性与方法结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部使用。

public修饰的成员在类外可以直接访问使用,private和protected修饰的成员在类外不能直接使用。

ea6021bb215447429ca2f986eaed6863.png

 

1.3类域

类定义了一个新的作用域,类的所有成员都在作用域中,在类体外定义成员时要用::操作符来指明成员。

二.实例化

类就像一个模型图纸一样,实例化之后可以实现许多的功能,但是在实例化之前,他是没有任何功能的,并且也不会占用实际的空间,只有当实例化出对象后,才能进行物理存储。

5832652d740848048a8e40464fc28fd0.png

95a5040b824b487f88b7bab29454b931.png 

 2.1对象大小

类实例化出的没一个成员都有独立的数据空间,那么类中的函数是否能进行储存呢?首先函数在编译之后是一段指令,对象无法进行存储。所以函数会以指针地址的方式,通过汇编指令call地址,找到函数的地址进行使用。

打个比方,类里面的成员变量每实例化一份就会开辟一份的空间,而类成员函数则会以一份公共的地址,放在一个代码公共区内。

99ddb0fa37904b74ad4039c7753ebea5.png

 三.this指针

在一个类中,若有多份成员函数,c++是如何找到访问对象的呢?

这里存在一个this指针,this指针在编译器编译后,会默认出现在第一个位置,增加一个当前类型的指针,类的成员访问成员变量,本质都是通过this指针来使用的。c++规定不能在形参和实参位置写this指针(编译器编译时会处理),但可以在函数体内使用this指针。

我们来看一串代码

5e1c6d8ecb894e7e95259e8aa50aaa7d.png

 它的编译结果是什么?

答案是正确通过!

p为空指针去访问类中的print函数,虽然是空指针,但是我们并没有拿去访问实体,所以不会出错。

d2a64ee7ea344c6da4c5561886083fe5.png

 若是这样去访问实体a所以就会运行崩溃

3.2this指针存在哪个区域内

1586400fb6154637b0920b6d4d96aad8.png

 常量区是用来存放一些字符类字符串类的全局变量。堆区是用来存放malloc手动开辟的空间变量的存储区域。静态区内存放的是static修饰的变量,以及全局变量。栈区是存放函数的形参实参的空间,以及函数内的变量。

很明显这里的this指针应当存放在栈区。

四.类的默认成员函数

4.1概念

默认成员函数就是用户没有显示实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下会默认生成6个成员函数。分别为,构造函数负责完成初始化工作,析构函数负责完成清理工作,拷贝构造是使用同类对象初始化创建对象,赋值重载只要是把一个对象赋值给另一个对象,取地址重载主要是将普通对象和const对象取地址。

4.2构造函数

构造函数是特殊的成员函数,虽然他的名字叫构造,但并不是以开空间创建对象为目的,而是对象实例化时初始化对象。构造函数的本质是为了替代以前stack类中写Init的功能,构造函数自动调用完美解决了此类问题。

4.2.2构造函数的特点以及实现

函数名与类名相同(在类中单独初始化,且名字为类名)。

无返回值(不需要给任何的类型,c++规定如此)。

对象实例化时会自动调用函数。如下图,d1会自动初始化三个值为1。

338865ae1d564062a3c93ac004d88011.png

b23ece4e660a418f8fd8fb8fa99531cd.png 

 构造函数可以重载,我们可以根据自身需要设置变量的值,以及是否需要缺省参数。

若我们不写,编译器会默认初始化生成默认构造函数,若成员变量为基本类型(char int double 指针等)那么编译器就会报错。若成员变量为自定义类型(先前已经在类中定义过的类型)就可以正常进行初始化。

无参构造函数,全缺省构造函数,默认生成的构造函数,都叫做默认构造函数(不传实参就可以调用),这三个函数有且只能存在一个,不能同时存在。

4.2.3构造函数实现法2

除了用函数体内赋值的方法,构造函数初始化还有一种方法就是初始化列表,初始化列表从一个冒号开始,用逗号分隔数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。(在{}和()中只能初始化一次)

b52330af24f145edbb7310182e8764bd.png

 当面对引用成员,const成员变量,没有默认构造的类类型变量,必须在:下进行定义。因为这些变量已经在主函数中定义过了,无法在构造函数中重新定义,所以只需要在:下定义即可使用。

4.2.4成员变量初始化逻辑

显示在初始化列表的成员变量就按这个值进行初始化。未显示在初始化列表的成员,如果有缺省值或者就按缺省值初始化,若没有缺省值,内置类型成员可能会初始化为随机值,自定义类型成员若有对应的构造函数那么就可以调用若没有则会报错。引用,const,没有默认构造函数的成员必须在初始化列表进行初始化。成员变量会根据声明的顺序进行初始化,所以尽量按照声明顺序进行定义。

4.3析构函数

析构函数与构造函数相反,析构函数是完成对对象本身的销毁,例如我们需要在函数内申请空间,当栈帧销毁时要先做清理资源使得资源释放。

4.3.2析构函数的特点

要在析构函数前加上~。(析构函数要与类同名)

fdc7a8a437b14945a29d110ceaac2eb3.png

 

参数无返回值,且一个类只能有一个析构函数,若未显示定义,系统会自动生成。

对象生命周期结束时,系统会自动调用析构函数。

跟构造函数类似,若我们不写编译器自动生成的析构函数对内置类型不做处理,自定类型成员则调用他们的析构函数。

若类中没有资源申请,析构函数可以不写,直接使用编译器生成的默认析构函数。但是当有资源申请时,一定要自己写析构函数,否则就会造成资源泄露。

4.3.3构造函数和析构函数的顺序

构造函数遵循,先全局变量,再局部变量,然后是局部静态变量。全局变量指在main主函数外的的变量,静态变量指static修饰的变量,而局部变量就指主函数内的变量。遵循从上到下的顺序进行构造。

析构时,遵循先局部再全局的思路,先析构局部的简单变量,再析构静态变量,最后是全局变量

4.4拷贝构造函数

类似于键盘的复制粘贴,用于复制类类型的函数。拷贝构造需要接受拷贝的必须是未存在的对象,而拷贝的必须是存在的对象。

4.4.1拷贝构造函数特点

1.拷贝构造函数是构造函数的一个重载。将函数内部的值copy到拷贝构造函数中。

05e222e9fb2542858a43d9dbe1e7e62c.png

 2.拷贝构造函数的参数只有一个且必须是类类型对象的引用(可以有其他参数,但必须是缺省参数),使用传值方式编译器会报错,因为会在语言逻辑上引发无穷递归调用。

所以在拷贝时必须使用引用直接指向原先的类。

3957bfa61a9444d1868f400939026142.png

 通过加上Const来防止拷贝的值被轻易修改。

若没有使用&符号,每当我们需要拷贝时,就要重新开辟一块空间,调用一次构造函数,此时通过拷贝函数将其copy进来,但是当我们调用拷贝函数时又会重新开辟一块新的空间,反复上述步骤。

3.若未显示定义拷贝构造,那么系统会调用默认的拷贝构造。这里的拷贝构造是浅拷贝,若变量为int,char这些类型的变量,拷贝时会单独开辟一块空间储存他们的值。若变量为malloc出的一块空间,或者指针文件类的指向型,浅拷贝后,还会指向原先的地址。若是这样一旦函数析构,或者变量改变,就会影响到拷贝的值。所以我们需要在拷贝函数上重新单独为其开辟一块新的空间储存。

934f14c7d9244858801e2a274cd48b7a.png

五.赋值运算符重载

5.1运算符重载

当运算符被用于类类型的对象时,编译器无法直接识别运算符定义,所以我们需要重新进行运算符定义。我们用operator和后面要定义的运算符共同构成,他相当于一个函数,拥有返回类型和参数列表以及函数体。重载的运算符函数的参数个数要与运算对象个数一样多,并且按照顺序进行排列。若重载运算函数是成员函数,则它的第一个运算对象默认传给隐形的this指针,所以运算符重载作为成员函数后,参数少一个。运算符重载后,其优先级和结合性与对应的内置类型运算符保持一致。当然也并不是所有的运算符都能重载,像.*    ::   sizeof   ?:      .不能进行重载

0ee4ef4925394e53b948532c17ad2101.png

 如图其中的.*是调用成员函数指针的符号。

一个类需要重载哪些运算符是看哪些运算符重载之后有意义,比如日期减日期可以得到天数,但日期加日期就无意义。

重载运算前置++和后置++时,重载名都是++,无法区分,所以c++规定,后置++重载时,增加一个int形参,跟前置++构成函数重载用于区分。

d4f9461fdc10488eabdf1ca21fe0c25a.png

 5.2赋值运算符重载

赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接拷贝赋值,这里需要跟拷贝构造进行区分,拷贝构造是一个对象拷贝初始化给另一个要创建的对象。

5.2.1特点

1.赋值运算符应当写成const当前类类型的引用,否则传参会有拷贝降低效率。

2.没有显示实现时,编译器会自动生成一个默认赋值运算符重载,默认赋值运算符重载为浅拷贝,对于动态开辟空间的变量会同时使用同一块空间,会导致错误发生。也就是说,当成员内有多个对象享用同一块空间时,需要自行手动实现。

3.手动实现时,需要先释放当前对象已有的资源,以避免内存泄露,对于(int,double)这类型的直接进行赋值,对于指针这类的需要重新开辟空间,进行深拷贝。最后返回当前对象的引用。

4.注意当出现a=a的情况,直接释放资源会导致错误,所以开头先判断两者地址是否重叠再进行拷贝。

代码参考 

87240b5d5a2e4980a04773f899eaedb1.png

5.3日期实现

5.3.1 Date.h

8e0c8dd8b3434bf1876236f6828871d1.png

6b827c414ca143ebbc46743e32012a2e.png 

 其中对于自身有改变的函数需要传递引用值,对于this指针不存在改变的要在函数后添加const修饰。

5.3.2 Date.cpp

35985b828d1e4fb79b29e79599f6899d.png

75c6c05da86e4e60a5c19411bf46e03c.png 

572d58a58dbd41df84e53f167d8facbe.png 

f5177c003eec4586b412901b8d2e4f18.png 

324a2e75e13c4988b06e75166e2d41a5.png 

dcfa6227425a4de5ab5032460694da16.png 

a857d7ccf95d4f5aaa244ea1f72e9cb8.png 

2aae3b47da4c4bd5b10c58995d241084.png 

 对于代码相似的函数实现尽可能的使用函数调用,这样可以减少代码量并且使得程序更加可观。

ostream&和&istream是c++库中定义的一个流输入输出重载的函数名。我们在类中定义友元函数,因为函数调用时是按照严格的左右位置调用的。

六.类型转换

当我们使用=来赋值类类型时,会存在一个隐式的类型转换,开辟一块空间将其进行拷贝函数赋值。

18826b5760b34079924520e67bcec22e.png

 若是遇到引用符号时,因为临时对象具有常性,所以在传值时,左值必须使用const将变量转变为常性。若等号传参时有多个变量则用{}来包含值,若是有多组则以这样的形式传值{{},{}}。若是自定义类型转换则需要相应的构造来支持。

七.static成员

7.1static成员特点

用static修饰的成员变量称之为静态成员变量,静态成员变量一定要在类的外部进行初始化。静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。用静态成员修饰的函数没有this指针,意味着函数内部不能访问非静态的成员,只能访问静态成员。而非静态的成员函数可以访问任意的静态成员变量和静态成员函数,只需要进行突破类域。突破类域有两种方法,类名::静态成员或者对象.静态成员。静态成员不走初始化列表,因为他不属于某个对象,也不能进行声明位置的初始化,但需要在声明处进行声明。

八.内部类

内部类就是在一个类里面再封装一个类,当这两个类之间有着紧密联系或者a类是为b类专门实现的时候可以使用(内部类默认是外部类的友元类)。内部类是一个独立的类,与定义在全局相比,它只受外部类类域限制和访问限定符限制,所以外部类的对象中不包含内部类。

九.匿名对象

用类型(实参)定义出来的对象叫做匿名对象,匿名对象的生命周期只在当前一行。

4a0267800767483c88f4bb9291f53a02.png

 若我们想延长匿名对象的生命周期,可以使用const a& b = A()的方法来延长生命。

匿名对象的用法主要服务于,当函数调用时给类类型给缺省值,无法直接给出时。

a06662d773ee4db5a3a205a81cbb6b06.png

 十.对象拷贝时的编译器优化

编译器为了提高程序的运行效率,在不影响正确性的情况下会尽可能减少一些传参过程中可以省略的拷贝。

4b4022a302a449c3a03dd0628075854c.png

 在不优化的版本下,f2中的aa传值过程中,会预先开辟一块空间接收return aa的值,再将值进行一次拷贝构造给回aa2中。在vs2019的debug版本下,则会省略掉中间值的拷贝构造,而是直接将return的返回值拷贝构造给aa2。而在release版本下,则会更加的激进,return返回的aa直接就是aa2的引用返回值,直接省略了空间的开辟。

 

 

 

 

 

相关文章:

类和对象plus版

一.类的定义 1.1类定义的格式 图中class为关键字,Stack为类的名字,用{}框住类的主体,类定义完后;不能省略。 为了区分成员变量,一般习惯在成员变量前面或后面加一个特殊标识,_或者m_ 1.2访问限定符 c采用…...

shell练习

开篇小贴士:为创建的sh(当然可以是任何一个文件)文件添加开头的注释 1、进入到家目录,然后通过 ls -a 查看全部文件 2、找到并编辑一个名为 .vimrc (Vim编辑器的核心配置文件)的配置文件,下图…...

ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具

项目地址:ApiChain 项目主页 ApiChain 简介 ApiChain 是一款类似 PostMan 的接口网络请求与文档生成软件,与 PostMan 不同的是,它基于 项目和迭代两个视角管理我们的接口文档,前端和测试更关注版本迭代中发生变更的接口编写代码…...

Vercel 设置自动部署 GitHub 项目

Vercel 设置自动部署 GitHub 项目 问题背景 最近 Vercel 调整了其部署政策,免费版用户无法继续使用自动部署功能,除非升级到 Pro 计划。但是,我们可以通过配置 Deploy Hooks 来实现同样的自动部署效果。 解决方案 通过设置 Vercel 的 Dep…...

SQL进阶:如何跳过多个NULL值取第一个非NULL值?

NULL 一、问题描述二、ORACLE<一>、last_value () over ()<二>、lag () over()<三>、相关子查询 三、MYSQL<一>、全局变量<二>、coalesce() lag() over()<三>、相关子查询<四>、 recursive<五>、lag() over() min() over() …...

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings); 1. 在laravel5使用join 子查询时 $sub_query DB::table(table1)->select([table1.id, cate_id])->join(table2, table1.id, , table2.id)->where(table1.cate_id, 2)->orderBy(tabl…...

远程控制软件:探究云计算和人工智能的融合

在数字化时代&#xff0c;远程控制工具已成为我们工作与生活的重要部分。用户能够通过网络远程操作和管理另一台计算机&#xff0c;极大地提升了工作效率和便捷性。随着人工智能&#xff08;AI&#xff09;和云计算技术的飞速发展&#xff0c;远程控制工具也迎来了新的发展机遇…...

网络协议之DNS

一、DNS概述 域名系统&#xff08;Domain Name System&#xff0c;缩写&#xff1a;DNS&#xff09;是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。DNS使用TCP和UDP端口53&#xff0c;通过递归查询请求的方式来…...

.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署

FreeSpire.XLS && Aspose.Cells包都可以实现。实现过程中发现如下问题&#xff1a; 本地测试通过&#xff0c; docker部署服务器后报错&#xff1a; The type initializer for Spire.Xls.Core.Spreadsheet.XlsPageSetupBase threw an exception. 由于缺少依赖&#xf…...

QML学习 —— 28、3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…...

flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现

数据逻辑处理布局中的逻辑处理Flutter类型数据处理 一、数据逻辑处理 我们接触的每一个Flutter界面&#xff0c;大多由布局和逻辑相关的代码组成。如Flutter初始工程的Counting Demo的代码&#xff1a; class _MyHomePageState extends State<MyHomePage> {// 变量 in…...

利用开源图床的技巧与实践

随着互联网的普及&#xff0c;图片的使用变得越来越广泛。无论是个人博客、社交媒体还是企业网站&#xff0c;都离不开图片的呈现。而图床作为图片存储和管理的工具&#xff0c;可以帮助开发者和内容创作者高效地管理图片资源。本文将探讨如何利用开源图床&#xff0c;并提供相…...

C++数据结构与算法

C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…...

Paddle Inference部署推理(三)

三&#xff1a;Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理&#xff0c;您可以通过以下两种方式获取静态图模型&#xff1a; &#xff08;1&#xff09;飞桨框架导出推理模型 飞桨框架在训练模型过程中&#xff0c;会在本地存储最终训练…...

python(四)os模块、sys模块

一、os模块 os 模块提供了很多程序与操作系统直接交互的功能 名称描述示例os.getcwd()得到当前工作目录&#xff0c;即当前Python脚本工作的目录路径‘D:\python’os.listdir()返回指定目录下的所有文件和目录名>>> os.listdir()os.remove()函数用来删除一个文件>…...

Oracle 数据库 IDENTITY 列

IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列&#xff0c;是由于其支持ANSI SQL 关键字 IDENTITY&#xff0c;其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的&#xff0c;毕竟MyQL已经有 AUTO_INCREMENT列&#xff0c;而SQL Server也已经有IDENT…...

【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法

【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 方法一&#xff1a;通过全局事件监听阻止 Backspace 导致页面后退 在 main.js 或组件的 mounted 中添加以下代码&#xff1a; //【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 document.addEventListener…...

深入解密 K 均值聚类:从理论基础到 Python 实践

1. 引言 在机器学习领域&#xff0c;聚类是一种无监督学习的技术&#xff0c;用于将数据集分组成若干个类别&#xff0c;使得同组数据之间具有更高的相似性。这种技术在各个领域都有广泛的应用&#xff0c;比如客户细分、图像压缩和市场分析等。聚类的目标是使得同类样本之间的…...

ArcGIS应用指南:ArcGIS制作局部放大地图

在地理信息系统&#xff08;GIS&#xff09;中&#xff0c;制作详细且美观的地图是一项重要的技能。地图制作不仅仅是简单地将地理数据可视化&#xff0c;还需要考虑地图的可读性和美观性。局部放大图是一种常见的地图设计技巧&#xff0c;用于展示特定区域的详细信息&#xff…...

非root用户安装CUDA

1.使用nvidia-smi查看当前驱动支持的最高CUDA版本&#xff1a; 表示当前驱动最多支持cuda12.1 2.进入cuda安装界面&#xff0c;https://developer.nvidia.com/cuda-toolkit-archive&#xff0c;选择想要安装的版本&#xff0c;例如想要安装CUDA11.4&#xff1a; 如果需要查看ub…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...