C++类和对象补充
目录
前言:
1. 构造函数->初始化列表
1.1 初始化列表出现原因
1.2 初始化列表写法
2. explicit关键字
2.1 explict的出现
2.2 explict的写法
3. static成员
4. 友元
4.1 友元函数
4.2 友元类
5. 内部类和匿名对象
5.1 内部类
5.2 匿名对象
前言:
本篇讲解的内容是类和对象的补充知识,也就是类和对象当中平时不太注意,但是有比较重要的知识。其中包括构造函数中的初始化列表、static成员、友元、内部类、匿名对象,以及部分小知识。如果小伙伴们有需要请向下查看咯。
1. 构造函数->初始化列表
1.1 初始化列表出现原因
朋友们,还记得我上篇讲的,当我们在实例化一个对象的时候,编辑器会干嘛?会调用类里的构造函数,对类里面的成员变量作合适的初始化。如下:
class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};
但是朋友们,有没有想过一个问题?那就是虽然我们在实例化的时候传入了一个参数,但是那真的算是初始化吗?可能有的小伙伴没有理解我的话。那我换一个说法,我们传入一个值用于初始化,并且将这个值赋值给了一个变量,那么这一步算是初始化吗?
答案是否,这一个过程并不能说是初始化,我可以举一个例子:
int a = 0; //初始化a为0
int b; //创建了一个变量b
b = 0; //赋值b为0
大家可以看出这两者的区别了吗?我相信是能的,那么再回到我们的构造函数,这个时候我们再看它,他是初始化还是赋值操作?相信大家心里有数了吧。
不过话又说回来,这个初始化和赋值有什么影响吗?这么看起来好像没有区别啊?确实,如果是这种类型的变量赋值和直接初始化没有区别,但是大家可能忘了某些东西:引用、const成员变量。想到了吗?
int& c; //引用不初始化
const int d; // const成员变量不初始化
d = 10; //const成员变量重新赋值
这几个写法很明显是错误的,相信大家也能够分辨出来,那么我们将这两个类型写在类里,此时我们的写法还正确吗?肯定是错误的。
所以,C++祖师爷基于这个点,为我们的构造函数多添加了一个功能——初始化列表。
1.2 初始化列表写法
先看一下代码是如何写的:
class A
{
public:A(int a) :_a(a) //初始化列表{}
private:int _a;
};
class B
{
public:B(int a, int ref):_aobj(a) //初始化列表, _ref(ref), _n(10){}
private:A _aobj; // 没有默认构造函数int& _ref; // 引用const int _n; // const
};
大家看看我定义的两个类,有没有发现它里面的构造函数多了个东西?那就是以冒号开始,用逗号分隔每一个变量,每个变量加上括号和初始值。
用上述的B类构造函数为例子:
:_aobj(a)
, _ref(ref)
, _n(10)
这就是初始化列表写法,当然,如果我们初始化有特殊的需求,还是可以将功能写在初始化列表下方的花括号中,例如条件判断、申请堆上的空间之类的。
编辑器有一个对于初始化列表的规定,那就是不管我们写不写,它都会自己去运行一遍,不过它却不会对这些变量做任何的处理,只有我们写了,他才会为其赋初值。
还有一点需要我们注意,请先看下方代码,并计算_a1和_a2的初始值。
class A
{
public:A(int a):_a1(a), _a2(_a1){}void Print() {cout << _a1 << " " << _a2 << endl;}
private:int _a2;int _a1;
};int main() {A aa(1);aa.Print();
}
选项:
A. 输出1 1
B.程序崩溃
C.编译不通过
D.输出1 随机值
答案是D,与大家计算的是否有出入了?相信多数朋友会选择a吧?因为我就是其中之一。
其实初始化列表的初始化顺序不是我们眼睛看到的那样,它的初始化顺序是变量定义的顺序,看下代码:
private:int _a2;int _a1;
也就是说,_a2先用_a1的初始值也就是随机值赋值了,然后_a1再通过1赋值,这也就造成了我们之前产生的小bug。
2. explicit关键字
2.1 explict的出现
在讲解这个关键字的之前,我想问一个问题,大家知道下面的两种实例化对象的方式有什么不同吗?(不是说写法)。
Date d1(2023,2,17);
Date d2 = {2023,2,17};
这样问估计有些难为人,我就直接讲了,第一种会直接用这些初始值通过构造函数实例化,
但是第二种不同,第二种通过这些初始值,调用构造函数实例化之后,然后通过赋值的方式将其转换给d2。大家看出区别了吗?也就是说第一种实例化只有构造函数参与,但是第二种不仅有构造函数,还有拷贝构造参与。不过对于现在的编辑器来说已经被优化了,二者都只有构造函数参与,如果按照刚出现的那段时间,用第二种在构造一个对象的时候产生两个变量大小的空间,这务必会影响我们程序运行的效率。
那我问大家,为什么会出现这个过程呢?先看下方的代码:
int a = 10;
double b = (double)a;
问:我们将a强制类型转换成double类型,int a是否还存在。
答案是当然存在,强制类型转换只会新开辟一个临时空间存储,然后赋值给b,其中a的参与只有提供10这个数的价值。通过等效的理解方式,大家再去看上面的Date d2 = {2023,2,17};是不是瞬间就明白了?只不过该操作是隐式类型转换。
explict的出现就是为了禁止这种强制类型转换的。
2.2 explict的写法
class Date
{
public:explicit Date(int year):_year(year){}Date& operator=(const Date& d){if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}
private:int _year;int _month;int _day;
};
void Test()
{Date d1(2022);d1 = 2023; //错误}
大家可以看到,如果我们不添加explict,d1 = 2023这种写法是正确的,但是大家可以赋值这段代码进入你的编辑器看一看,这个操作是否还正确?
所以explict的功能是:用explicit修饰构造函数,将会禁止构造函数的隐式转换。
3. static成员
对于static关键字,想必大家还是很了解的,但是当他出现在类里面还清楚吗?
我们都知道static描述的变量,这个变量的生命周期会到程序结束才会停止,而不是局限于函数结束就被销毁。这个特性static也延续到类当中,当用static去修饰类里面的变量,那么这个变量的生命周期就被提升,并且它并不单独属于某个实例化的类对象,而是属于整个类。
大伙看到这估计有些疑问,他既然写在了类里面,又不属于这个类的对象,那么它在哪?答案是它被存在了静态区。也就是计算类的大小也不会将他算入其中。
class Date
{
public:static int a;
private:int _year;int _month;int _day;
};int main()
{Date d1;cout << sizeof(d1) << endl;return 0;
}
正常来说,这个类的大小应该是16对吧,因为又4个整型变量嘛,但是其中有一个变量是static修饰的,所以它的大小不计入其中。
因为这个static修饰的变量不属于某一个变量,所以说,没有任何一个对象想能对其进行初始化,只能有一个操作,那就是类外定义。
int Date::a = 0;
至于为什么要这样做?想一想,要是每一个对象都能够对static初始化,那么static修饰这个变量有什么意义呢?
并且static不只是可以修饰变量,还可以修饰成员函数,将这个成员函数变为静态成员函数。
以下几个特性需要大家知道:
1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制
知道了这些特点,下面两个问题相信大家也能够回答了。
1. 静态成员函数可以调用非静态成员函数吗?
2. 非静态成员函数可以调用类的静态成员函数吗?
4. 友元
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元分为:友元函数和友元类
4.1 友元函数
一般来说友元用到的场景不会太多,但是有一个东西如果不用友元那么它的操作方式会变得十分奇怪,那就是重定义<<和>>这两个操作符。
class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}ostream& operator<<(ostream& _cout){_cout << _year << "-" << _month << "-" << _day << endl;return _cout;}
private:int _year;int _month;int _day;
};int main()
{Date d1(1, 2, 3);d1 << cout;//cout << d1; //错误return 0;
}
d1 << cout; -> d1.operator<<(&d1, cout); 不符合常规调用,因为成员函数第一个参数一定是隐藏的this,所以d1必须放在<<的左侧。
还记得我上一篇讲的吗?因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作数了。但是实际使用中cout需要是第一个形参对象,才能正常使用。所以要将operator<<重载成全局函数。但又会导致类外没办法访问成员,此时就需要友元来解决。operator>>同理。
这个时候友元函数的出现就显得十分重要了:
class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
ostream& operator<<(ostream& _cout, const Date& d)
{_cout << d._year << "-" << d._month << "-" << d._day;return _cout;
}
istream& operator>>(istream& _cin, Date& d)
{_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;
}
int main()
{Date d;cin >> d;cout << d << endl;return 0;
}
可以看到我们的友元函数的写法就是将函数定义在类外面,然后在类里面写下声明并在前面添加上friend关键字。声明的位置可以是任意位置,但是我们习惯将其写在类最上方,而且友元函数突破了public、protected、private的限制。也就是友元函数能够直接访问类里面的私有成员。
friend ostream& operator<<(ostream& _cout, const Date& d);
friend istream& operator>>(istream& _cin, Date& d);
特性:
友元函数可访问类的私有和保护成员,但不是类的成员函数
友元函数不能用const修饰
友元函数可以在类定义的任何地方声明,不受类访问限定符限制
一个函数可以是多个类的友元函数
友元函数的调用与普通函数的调用原理相同
4.2 友元类
特性:
1. 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2. 友元关系是单向的,不具有交换性。比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。
3. 友元关系不能传递,如果C是B的友元, B是A的友元,则不能说明C时A的友元。
4. 友元关系不能继承,在继承位置再给大家详细介绍。
class Time
{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类//中的私有成员变量
public:Time(int hour = 0, int minute = 0, int second = 0): _hour(hour), _minute(minute), _second(second){}
private:int _hour;int _minute;int _second;
};
class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}
private:int _year;int _month;int _day;Time _t;
};
5. 内部类和匿名对象
5.1 内部类
概念:
1. 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,
它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
2. 注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。
特性:
1. 内部类可以定义在外部类的public、protected、private都是可以的。
2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
3. sizeof(外部类)=外部类,和内部类没有任何关系。
class A
{
private:static int k;int h;
public:class B // B天生就是A的友元{public:void foo(const A& a){cout << k << endl;//OKcout << a.h << endl;//OK}};
};
int A::k = 1;
int main()
{A::B b;b.foo(A());return 0;
}
5.2 匿名对象
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};
class Solution {
public:int Sum_Solution(int n) {return n;}
};
int main()
{
A aa1;
// 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义
//A aa1();
// 但是我们可以这么定义匿名对象,匿名对象的特点不用取名字,
// 但是他的生命周期只有这一行,我们可以看到下一行他就会自动调用析构函数
A();
A aa2(2);
// 匿名对象在这样场景下就很好用,当然还有一些其他使用场景,这个我们以后遇到了再说
Solution().Sum_Solution(10);
return 0;
}
以上就是我对类于对象的全部补充啦,还请大家多多支持咯!
相关文章:
C++类和对象补充
目录 前言: 1. 构造函数->初始化列表 1.1 初始化列表出现原因 1.2 初始化列表写法 2. explicit关键字 2.1 explict的出现 2.2 explict的写法 3. static成员 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类和匿名对象 5.1 内部类 5.2 匿名对象 前言&a…...
08 SpringCloud 微服务网关Gateway组件
网关简介 大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢? 如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。 这样的架构,会存…...
极验3代 加密分析
目标链接 aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challenge;gt是固定的,但是challenge每次请求会产生不同的,这里的请求的并没有什么加密参数。 下一个请求 gettype.php,…...
python 数据分析可视化实战 超全 附完整代码数据
代码数据:https://download.csdn.net/download/qq_38735017/873799141.1 数据预处理1.1.1 异常值检测①将支付时间转为标准时间的过程中发生错误,经排查错误数据为‘2017/2/29’,后将其修改为‘2017/2/27’。②经检测发现部分订单应付金额与实付金额都为…...
有趣的HTML实例(十三) 咖啡选择(css+js)
一个人追求目标的路途是孤单的,一个人独品辛酸的时候是寂寥的,一个人马不停蹄的追赶着,狂奔着,相信前方是一片光明,我从不放弃希望,就像我对生活的信念,没有人可以动摇。 ——《北京青年》 目录…...
【力扣-LeetCode】1139. 最大的以 1 为边界的正方形 C++题解
1139. 最大的以 1 为边界的正方形难度中等137收藏分享切换为英文接收动态反馈给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。示例 1…...
【JavaGuide面试总结】Redis篇·下
【JavaGuide面试总结】Redis篇下1.如何使用 Redis 事务?2.如何解决 Redis 事务的缺陷?3.说说Redis bigkey吧4.大量 key 集中过期问题怎么解决的5.如何保证缓存和数据库数据的一致性?6.缓存穿透有哪些解决办法?7.缓存击穿有哪些解决…...
ForkJoinPool原理
1、概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架。ForkJoinPool是Java中提供了一个线程池,特点是用来执行分治任务。主题思想是将大任务分解为小任务,然后继续将小任务分解,直至能够直接解决为止,然后再依次将任…...
02 python基本语法和数据类型
基本语法 python脚本可以在python交互式shell或者代码编辑器中编写与运行。python文件的扩展名一般为.py python使用缩进来区分不同的代码块,此特性有利于提高代码可读性。 下面是一个简单的python条件语句代码: 小明=矮穷错 小红=白富美 小华=高富帅 小李=程序员某人 = &quo…...
【办公类-16-09】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)
样例展示:跳过节日的运动场地循环排序表(8个班级8组内容 下学期一共20周)背景需求:上学期做过一次大班运动场地安排,跳过节日。2023.2下学期运动场地排班(跳过节日)又来了。一、场地器械微调二、…...
全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别
文章目录1. 文章引言2. 简述URL3. http完整请求3.1 DNS域名解析3.2 TCP的3次握手3.3 发起http请求3.4 浏览器解析html代码3.5 浏览器对页面进行渲染呈现给用户4. 解决404错误的方法5. 补充知识点5.1 cookie和session的区别5.2 ChatGPT的介绍1. 文章引言 正赶上最近ChatGPT很火…...
Django图书商场购物系统python毕业设计项目推荐
mysql数据库进行开发,实现了首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、订单管理、系统管理等内容进行管理,本系统具有良好的兼容性和适应性,为用户提供更多的网上图书商城信息,也提供了良好的平台&#x…...
基于模型预测控制(MPC)的悬架系统仿真分析
目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.3 结论 3 总结 前言 模型预测控制是无人驾驶中较为热门的控制算法,但是对于悬架等这类系统的控制同样适用。 我们知道模型预测控制主要可以划分为三个部分: …...
Word处理控件Aspose.Words功能演示:使用 Java 拆分 MS Word 文档
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word处理文件…...
图扑数字孪生智慧机场,助推民航“四型机场“建设
前言 民航局印发的《智慧民航建设路线图》文件中,明确提出智慧机场是智慧民航的四个核心抓手之一。并从机场全域协同运行、作业与服务智能化、智慧建造与运维方面,为智慧机场的发展绘制了清晰的蓝图。 效果展示 图扑软件应用自主研发核心产品 HT for …...
内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程
管家婆软件从网络架构上分两种版本:web(浏览器http端口)访问的版本和客户端(211固定端口sqlserver数据库)访问的版本。公司库管经常用仓库登录管家婆,一旦需要在公司外部登陆访问管家婆客户端,就…...
CCNP350-401学习笔记(1-50题)
1、Which function does a fabric edge node perform in an SD-Access deployment?A. Connects endpoints to the fabric and forwards their traffic. B. Encapsulates end-user data traffic into LISP. C. Connects the SD-Access fabric to another fabric or external La…...
基于微信小程序的新冠肺炎服务预约小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)
在K8s平台部署项目流程 在K8s平台部署Java网站项目 制作镜像流程 第一步:制作镜像 使用镜像仓库(私有仓库、公共仓库): 1、配置可信任(如果仓库是HTTPS访问不用配置) # vi /etc/docker/daemon.json { "…...
网络原理 (1)
网络原理 文章目录1. 前言: 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 (重点)1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 :三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…...
LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】
LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】题目描述:解题思路一:前缀和。前缀和来记录边长。解题思路二:0解题思路三:0题目描述: 给你一个由若干 0 和 1 组成的二维网格 grid,请…...
windows10/11,傻瓜式安装pytorch(gpu),在虚拟环境anaconda
安装anaconda地址 :Anaconda | The Worlds Most Popular Data Science Platform安装选项全默认点击next就行。查看支持cuda版本cmd命令行输入nvidia-smi。下图右上角显示11.6为支持的cuda版本。要是显示没有nvidia-smi命令。得安装nvidia驱动,一般情况都…...
Revit导出PDF格式图纸流程及“批量导出图纸”
一、Revit导出PDF格式图纸流程 1、点击左上方“应用程序菜单”即“R”图标,进择“打印”选项。 2、在弹出的对话框中,需要设置图纸“打印范围”,选择“所选的视图/图纸选项”,点击“选择”,按钮,选择我们需…...
【自学Linux】 Linux文件目录结构
Linux文件目录结构 Linux文件目录结构教程 在 Linux 中,有一个很经典的说法,叫做一切皆文件,因此,我们在系统学习 Linux 之前,首先要了解 Linux 的文件目录结构。Linux 主要的目录有三大类,即根目录(/)&a…...
如何让APP在Google Play中成为特色
Google Play覆盖了 190 多个地区,数十亿的用户,所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型:热门游戏或应用,畅销应用,安装量增长的应用,产生最多收入的应用。 那么…...
【C++】cin的处理过程
使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据 类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。 为说明这是如何完成的,来看…...
读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理
波段重组在软件中查找:菜单栏-》影像基本处理-》波段处理-》波段重组,弹出如下对话框:根据对话框中的提示,输入需要处理的数据。注意:1、输入数据添加之后,需要点击其中任意一条数据,获取数据波…...
Yakit Web Fuzzer 终极能力强化:热加载 Fuzz
Background 在 HTB:BountyHunter 中,我们发现 Web Fuzzer 在使用中可以 “更强”,我们需要编写 Yak 脚本的事情,如果可以经过某些 Web Fuzzer 的优化,可以达到同样的效果。 在一个标签中,我们实现{{base6…...
Qt新手入门指南 - 如何创建模型/视图(三)
每个UI开发人员都应该了解ModelView编程,本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今ÿ…...
【Spring】手动实现简易AOP和IOC
前言 XML:通过Dom4j对XML进行解析和验证。 IOC:通过获取要创建对象的Class类型、构造函数后,通过反射来实现。 AOP:通过使用JDK动态代理和Cglib动态代理实现。 一、解析XML 1.1、解析bean标签 /*** 解析bean标签* param xmlBean…...
维护一个网站/seo怎么做优化计划
最近想对 API 做一些自动化测试,看了几个工具,最后选择了 postman,感觉 postman 的设计更好一些,我们可以在请求发送之前和请求获取到响应之后都可以自定义脚本,很灵活。而且 postman 的支持直接导入 swagger 定义&…...
互联网建设网站/品牌营销活动策划方案
一、Redis主从复制主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性1. 主从复制的相关操作a,配置主从复制方式一、新增redis6380.conf, 加入 slaveof 192.168.152.128 6379, 在6379启动完后再启638…...
创建网站哪个好/新闻20条摘抄大全
一,什么是乐观同步 乐观同步是在取出一个数据A的时候,会携带一个取出时的版本信息,比如:1,而如果在操作的时候,有另外一个操作B把存储在Redis中的数据修改了,那个redis中的数据版本就会加1&…...
提供网站建设工具的公司/seo网站优化方案书
自定义注解 Target 自定义注解的使用范围 ElementType.METHOD:方法声明 ElementType.TYPE:类、接口(包括注解类型)或enum声明 ElementType.CONSTRUCTOR:构造器的声明 ElementType.FIELD:域声明࿰…...
网站开发补充合同范本/关键词首页优化
文章目录第2章 缓存解决方案学习目标1. SpringDataRedis1.1 SpringDataRedis简介1.2 SpringDataRedis快速入门1.2.1 准备工作1.2.2 值类型操作1.2.3 Set类型操作1.2.4 List类型操作1.2.5 Hash类型操作1.2.6 ZSet类型操作1.2.7 过期时间设置2. 缓存穿透、缓存击穿、缓存雪崩2.1 …...
网站长春网站建设/怎么建网站教程
养成好习惯,点个赞 再走;有问题,欢迎私信、评论,我看到都会回复的 使用一维数组,存储最小值及其所在行与列我们平时说的行与列都是从1开始计数而数组中的下标是从零开始计数代码中演示的是一个三阶二维数组 #include&…...