今天你学C++了吗?——C++中的类与对象(日期类的实现)——实践与知识的碰撞❤
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥
♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥
♥♥♥我们一起努力成为更好的自己~♥♥♥
♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥
♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥
✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨
❤C++专栏中比较重要的类与对象知识现在已经更新完毕❤欢迎大家随时访问哦❤
类与对象——第一集
类与对象——第二集
类与对象——第三集
类与对象——第四集
类与对象——最后一集(日期类的实现)
在前面的博客内容中,我们已经学习了C++中类与对象的大部分知识,这一篇博客我们将会利用前面学习到的知识,来实现一个日期类~用实践检验我们学习的成果~准备好了吗~我们发车啦~🚗🚗🚗🚗🚗🚗
目录
实现一个怎么样的日期类?
定义一个日期类
构造函数
拷贝构造函数
打印日期
使用成员函数
流插入运算符重载
流提取运算符重载
赋值运算符重载
判断日期大小关系
等于
不等于
大于
大于等于
小于
小于等于
日期+=天数
日期+天数
日期-=天数
日期-天数
前置++
后置++
前置--
后置--
日期-日期
总代码
Date.h
Date.cpp
实现一个怎么样的日期类?
我们生活中经常会使用到日期,比如日期加天数,日期-日期,倒计时等等,这里我们要实现的日期类就是来实现这样一些具有实际意义的日期处理~像日期加日期这种是没有实际意义的,我们这里也就不会进行实现~
这里我们创建三个文件~
Date.h
定义日期类结构,对要提供的操作进行声明
Date.cpp
具体实现各种操作
test.cpp
进行各种操作的测试
定义一个日期类
我们这里实现的日期类是包含年、月、日的,所以我们给到的成员变量就有年、月、日,同时使用private访问限定符进行修饰,不希望只希望在这一个类里面访问成员变量~
#include<iostream>
using namespace std;
//定义日期类
class Date
{
private://成员变量 年、月、日int _year;int _month;int _day;//前面加一个下划线便于区分
public://成员函数};//不要忘记末尾的分号
其他文件就可以包含我们自己写的头文件
注意这里是我们自己写的头文件,所以包含头文件的时候应该是双引号" ",而不是尖括号<>
构造函数
我们不希望使用编译器生成的构造函数让日期是随机值,所以我们这里需要自己写构造函数~
同时在构造的同时,我们也可以检查日期是否合法~
//检查日期是否合法~
bool Date::CheckDate()const
{if (_month > 12 || _month < 1 || _day <= 0 || _day > GetMonthDay(_year,_month)){return false;}return true;
}
//Date::Date(int year = 0,int month = 0,int day = 0)//err
Date::Date(int year,int month,int day)//声明和定义不可以同时给缺省参数
//在声明里面给缺省参数
{_year = year;_month = month;_day = day;//检查日期是否合法if (!CheckDate()){cout << "日期非法!" << *this << endl;}
}
拷贝构造函数
拷贝构造函数可以用一个已经初始化的对象来初始化新创建的对象,事实上,这里没有涉及到资源管理,我们可以不显示写拷贝构造函数,直接使用编译器自动生成的拷贝构造函数也是没有问题的~
显示写拷贝构造函数
//拷贝构造函数——可以用来初始化新创建的对象
Date::Date(const Date& d)
{_year = d._year;_month = d._month;_day = d._day;
}
补充:自定义类型传值传参和传值返回会产生临时对象,所以它们都会调用拷贝构造函数~
(C++规定自定义类型对象进行拷贝的行为必须调用拷贝构造)
打印日期
接下来我们先来一个简单的,也是我们以前练习过的打印日期~
我们给出两种方法,一个是成员函数,一个是流插入运算符重载~
使用成员函数
使用成员函数的好处是,每一个成员函数参数都隐含一个this指针,这样我们就可以直接获得当前对象年月日进行打印~
void Date::Print()const
//const 修饰this指针指向的内容,我们不希望内容被修改
{cout << _year << "年" << _month << "月" << _day << "日" << endl;
}
流插入运算符重载
》<< 流插入运算符有两个操作数,在这里一个是ostream类型,一个是Date类型,如果把它设计成成员函数,那么隐含的this指针在第一个参数,就不符合我们平常使用的习惯~所以我们可以把它设计为全局函数~
》但是全局函数又不可以访问类的私有成员了,前面我们提到过三种解决方案~~
1.使用友元函数
2.提供get成员函数,获取年月日
3.将年月日成员变量改为公有
这里我们使用友元函数来达到目的~
在类里面加上friend关键字说明这个函数是这个类的友元函数,可以访问私有成员~
类外面对这个友元函数进行声明,这个时候就不需要再加friend关键字了
在Date.cpp文件里面进行函数的定义~
ostream& operator <<(ostream& ou, const Date& d)
{ou << d._year << "年" << d._month << "月" << d._day << "日" << endl;return ou;//有返回值实现连续输出
}
注意:这个重载函数返回值实现我们进行连续输出的操作~同时这里返回值只能使用引用返回~输出流我们是不可以改变的~
流提取运算符重载
知道了流插入运算符重载,流提取运算符重载就十分容易了~
在类里面加上friend关键字说明这个函数是这个类的友元函数,可以访问私有成员~这里与流插入运算符重载不相同的是d不能加const修饰,因为我们本身输入是修改了内容的~
类外面对这个友元函数进行声明,这个时候就不需要再加friend关键字了
在Date.cpp文件里面进行函数的定义~这里还可以增加一个小细节就是检查日期是否合法~
istream& operator>>(istream& in, Date& d)
{while (1){in >> d._year >> d._month >> d._day;//检查日期是否合法if (d.CheckDate()){break;}else{cout << "日期非法,请重新输入!" << endl;}}return in;
}
赋值运算符重载
》对于自定义类型,使用赋值运算符重载可以让我们完成两个已经初始化对象的拷贝~
》注意与拷贝构造函数进行区分,拷贝构造函数是用一个已经初始化的对象来初始化一个新创建的对象~
》赋值运算符重载同样有返回值,这样就可以实现连续赋值~
// d1 = d2
//* this d
//这里需要修改*this
Date& Date::operator=(const Date& d)
{_year = d._year;_month = d._month;_day = d._day;return *this;//有返回值,实现连续赋值
}
判断日期大小关系
等于
等于这个很好判断,只需要年月日都是相等的,那么这两个日期就是相等的~
bool Date::operator==(const Date& d)const
{//年月日相等就相等return (_year == d._year)&& (_month == d._month)&& (_day == d._day);
}
不等于
这里有两个方法
》一个是直接写,只要年月日有一个不相同,那么这两个日期就不相等~
》一个是进行代码复用(更加推荐这个方式,减少代码量)这里日期不相等就是相等的否
bool Date::operator!=(const Date& d)const
{//1.直接写/*return (_year != d._year)|| (_month != _month)|| (_day != d._day);*///2.代码复用return !(*this == d);
}
大于
判断思路:先判断年,年大就大;年相等判断月,月大就大;月相等就判断日,日大就大
bool Date::operator>(const Date& d)const
{if (_year > d._year){return true;}//年相等判断月if (_year == d._year){if (_month > d._month){return true;}//月相等判断天else if(_month == d._month){if (_day > d._day){return true;}}}return false;
}
大于等于
这里使用代码复用就大大减少我们的代码量了~事实上,前面实现了判断大于和等于,接下来的代码判断都可以使用代码复用~
bool Date::operator>=(const Date& d)const
{//代码复用return (*this == d) || (*this > d);
}
小于
bool Date::operator<(const Date& d)const
{代码复用return !((*this == d) || (*this > d));
}
小于等于
bool Date::operator<=(const Date& d)const
{//代码复用return (*this < d) || (*this == d);
}
日期+=天数
》思路:加的天数先加在日上面得到总天数,判断总天数是否大于当前月份天数,比当前月份天数大就用总天数减去当前月份天数,月加加,再判断是否大于当前月份天数,如此循环~
》这里我们就需要提供一个获取日期天数的方法,这里我们直接把这个函数定义在类里面,这个函数就成为了内联函数,可以直接在调用的地方进行展开~
获取月份天数:
//获取月份天数
// 直接定义在类里面成为inline函数
int GetMonthDay(int y, int m)const
{static int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31, 30,31 };// 0 1 2 3 4 5 6 7 8 9 10 11 12if (m == 2 && ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)))//闰年的二月29天{return 29;}return arr[m];
}
日期+=天数:
//使用引用返回,减少拷贝次数
Date& Date::operator+=(int day)
{//特殊处理,day<0,调用日期-=天数if (day < 0)//调用日期减天数{*this -= (-day);}else{_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);_month++;//特殊处理:到下一年if (_month == 13){_year++;_month = 1;}}}return *this;
}
日期+天数
》思路:这里日期加天数,本身是没有变化的,我们可以创建一个临时对象进行+=天数,返回临时对象~
》这里临时对象不可以使用引用返回,因为出了这个作用域临时对象就会销毁,我们需要传值返回,调用拷贝构造~
这里返回不可以使用引用,局部对象出了作用域就销毁了,原来的对象存储的数据随机了
//返回对象会产生一个临时对象,调用拷贝构造
Date Date::operator+(int day)
{//创建一个临时对象Date tmp(*this);//特殊处理,day < 0if (day < 0){tmp -= (-day);}else{//代码复用tmp += day;}return tmp;
}
日期-=天数
》思路:先让日减去当前月天数,如果_day<0,就让_month-- (注意特殊处理_month==0的时候,_year--,_month=1),_day加上_month的天数,再次判断_day是不是小于0
Date& Date::operator-=(int day)
{if (day < 0){*this += (-day);}else{_day -= day;while (_day <= 0){--_month;if (_month == 0){_year--;_month = 12;}_day += GetMonthDay(_year, _month);}}return *this;
}
日期-天数
》与日期+天数类似,进行代码复用就可以了~
Date Date::operator-(int day)
{Date tmp(*this);//特殊处理,day < 0,调用+=天数if (day < 0){tmp += (-day);}else{//代码复用tmp -= day;}return tmp;
}
前置++
》前置++是先++再使用,事实上也就是当前日期本身+=1,我们一样可以使用代码复用~
Date& Date::operator++()
{*this += 1;return *this;
}
后置++
》这里像前面那样为了与前置++区分,这里参数会有一个int进行区分,没有什么特别的意义,只是为了好区分~
》后置++是先使用再++,所有我们需要使用一个临时对象来保存++之前的值进行返回~
Date Date::operator++(int)//后面加int与前置++区分
{Date tmp = *this;*this += 1;return tmp;
}
接下来的前置--和后置--有了这些基础,相信就是小菜一碟了~
前置--
Date& Date::operator--()
{*this -= 1;//本身-=1return *this;
}
后置--
Date Date::operator--(int)
{Date tmp = *this;*this -= 1;return tmp;
}
日期-日期
日期-日期是一个比较有意义的计算,而日期+日期没有实际意义,这里就不进行实现了~
》日期-日期,我们可以直接让小日期走到大日期进行计数
》同时注意是前面的日期大,还是后面的日期大~使用一个flag进行标记~
//*this —— d
int Date::operator-(const Date& d)const
{int flag = 1;//标记,默认前面的日期大Date max = *this;Date min = d;if (*this < d){//后面的日期大,重新赋值max = d;min = *this;flag = -1;}int n = 0;//计数//让小日期走到大日期进行计数while (min != max){min++;//或者min += 1;n++;}return n * flag;
}
到这里,我们就实现了一个比较完整的日期类~如果小伙伴们有更好的想法~欢迎评论区留言或者私信小编哦❤
总代码
Date.h
#pragma once#include<iostream>
using namespace std;
//定义日期类
class Date
{
private://成员变量 年、月、日int _year;int _month;int _day;//前面加一个下划线便于区分
public://成员函数//构造函数Date(int year = 0, int month = 0, int day = 0);//全缺省参数//拷贝构造函数Date(const Date& d);//检查日期是否合法bool CheckDate()const;//获取月份天数// 直接定义在类里面成为inline函数int GetMonthDay(int y, int m)const{static int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31, 30,31 };// 0 1 2 3 4 5 6 7 8 9 10 11 12if (m == 2 && ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)))//闰年的二月29天{return 29;}return arr[m];}//显示日期//1.成员函数//后面加const不希望this指针指向的内容被修改void Print()const;//2.使用友元,流插入运算符重载,进行输出//日期d加const不希望内容被修改friend ostream& operator <<(ostream& ou, const Date& d);//流提取运算符重载//日期d不加const,输入本身修改了内容//输入后需要判断日期是否合法friend istream& operator>>(istream& in, Date& d);//日期操作运算符重载//赋值运算符重载Date& operator=(const Date& d);//日期相等==bool operator==(const Date& d)const;//只是判断,不希望日期被修改 *this 和 d//不相等!=bool operator!=(const Date& d)const;//大于>bool operator>(const Date& d)const;//>=bool operator>=(const Date& d)const;//<bool operator<(const Date& d)const;//<=bool operator<=(const Date& d)const;//日期+=天数——改变日期本身Date& operator+=(int day);//日期加天数,不改变本身Date operator+(int day);//日期-=天数——改变日期本身Date& operator-=(int day);//日期-天数,不改变本身Date operator-(int day);//前置++——先++再使用,本身发生变化Date& operator++();//后置++——先使用再++Date operator++(int);//后面加int与前置++区分//前置--Date& operator--();//后置--Date operator--(int);//日期减日期int operator-(const Date& d)const;};//不要忘记末尾的分号//>>和<<定义为全局函数,符合我们的使用习惯
//Date的友元函数,可以访问Date类里面的私有成员
ostream& operator <<(ostream& ou, const Date& d);//类外不需要再使用friend关键字istream& operator>>(istream& in, Date& d);
Date.cpp
#include"Date.h"//自己写的头文件使用""//Date::Date(int year = 0,int month = 0,int day = 0)//err
Date::Date(int year,int month,int day)//声明和定义不可以同时给缺省参数
//在声明里面给缺省参数
{_year = year;_month = month;_day = day;//检查日期是否合法if (!CheckDate()){cout << "日期非法!" << *this << endl;}
}//拷贝构造函数——可以用来初始化新创建的对象
Date::Date(const Date& d)
{_year = d._year;_month = d._month;_day = d._day;
}//检查日期是否合法~
bool Date::CheckDate()const
{if (_month > 12 || _month < 1 || _day <= 0 || _day > GetMonthDay(_year,_month)){return false;}return true;
}void Date::Print()const
//const 修饰this指针指向的内容,我们不希望内容被修改
{cout << _year << "年" << _month << "月" << _day << "日" << endl;
}ostream& operator <<(ostream& ou, const Date& d)
{ou << d._year << "年" << d._month << "月" << d._day << "日" << endl;return ou;//有返回值实现连续输出
}istream& operator>>(istream& in, Date& d)
{while (1){in >> d._year >> d._month >> d._day;//检查日期是否合法if (d.CheckDate()){break;}else{cout << "日期非法,请重新输入!" << endl;}}return in;
}// d1 = d2
//* this d
//这里需要修改*this
Date& Date::operator=(const Date& d)
{_year = d._year;_month = d._month;_day = d._day;return *this;//有返回值,实现连续赋值
}
bool Date::operator==(const Date& d)const
{//年月日相等就相等return (_year == d._year)&& (_month == d._month)&& (_day == d._day);
}bool Date::operator!=(const Date& d)const
{//1.直接写/*return (_year != d._year)|| (_month != _month)|| (_day != d._day);*///2.代码复用return !(*this == d);
}bool Date::operator>(const Date& d)const
{if (_year > d._year){return true;}//年相等判断月if (_year == d._year){if (_month > d._month){return true;}//月相等判断天else if(_month == d._month){if (_day > d._day){return true;}}}return false;
}bool Date::operator>=(const Date& d)const
{//代码复用return (*this == d) || (*this > d);
}bool Date::operator<(const Date& d)const
{代码复用return !((*this == d) || (*this > d));
}bool Date::operator<=(const Date& d)const
{//代码复用return (*this < d) || (*this == d);
}//使用引用返回,减少拷贝次数
Date& Date::operator+=(int day)
{//特殊处理,day<0,调用日期-=天数if (day < 0)//调用日期减天数{*this -= (-day);}else{_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);_month++;//特殊处理:到下一年if (_month == 13){_year++;_month = 1;}}}return *this;
}这里返回不可以使用引用,局部对象出了作用域就销毁了,原来的对象存储的数据随机了
//返回对象会产生一个临时对象,调用拷贝构造
Date Date::operator+(int day)
{//创建一个临时对象Date tmp(*this);//特殊处理,day < 0if (day < 0){tmp -= (-day);}else{//代码复用tmp += day;}return tmp;
}Date& Date::operator-=(int day)
{if (day < 0){*this += (-day);}else{_day -= day;while (_day <= 0){--_month;if (_month == 0){_year--;_month = 12;}_day += GetMonthDay(_year, _month);}}return *this;
}Date Date::operator-(int day)
{Date tmp(*this);//特殊处理,day < 0,调用+=天数if (day < 0){tmp += (-day);}else{//代码复用tmp -= day;}return tmp;
}Date& Date::operator++()
{*this += 1;return *this;
}Date Date::operator++(int)//后面加int与前置++区分
{Date tmp = *this;*this += 1;return tmp;
}Date& Date::operator--()
{*this -= 1;return *this;
}Date Date::operator--(int)
{Date tmp = *this;*this -= 1;return tmp;
}//*this —— d
int Date::operator-(const Date& d)const
{int flag = 1;//标记,默认前面的日期大Date max = *this;Date min = d;if (*this < d){//后面的日期大,重新赋值max = d;min = *this;flag = -1;}int n = 0;//计数//让小日期走到大日期进行计数while (min != max){min++;//或者min += 1;n++;}return n * flag;
}
♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥
♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥
✨✨✨✨✨✨个人主页✨✨✨✨✨✨
相关文章:
今天你学C++了吗?——C++中的类与对象(日期类的实现)——实践与知识的碰撞❤
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
享元模式的理解和实践
在软件开发中,性能优化是一个永恒的话题。在追求高性能的过程中,减少内存的使用是一项重要的任务。享元模式(Flyweight Pattern)就是一种用于减少内存使用量的设计模式,它特别适用于存在大量重复对象的场景。本文将详细…...
Unreal Engine 中的UI界面开发
推荐的使用方式 轻量级 HUD:使用 Canvas 绘制简单的文本、调试信息或基础 UI(如准星、血量条等)。 复杂 UI:使用 UMG(Unreal Motion Graphics)和 Slate 进行布局和交互,避免手动管理 Canvas 绘制。 避免遮挡场景:仅绘制必要的内容,并利用透明度(如 FLinearColor(1, 1…...
Docker在Ubuntu和CentOS系统下的安装
目录 1. 各版本平台支持情况2. 在Ubuntu系统下安装docker3. 常见报错4. Docker的镜像源修改5. Docker目录修改6. 在CentOS系统下安装docker 1. 各版本平台支持情况 (1)平台支持情况如下: Server 版本 桌面版本 2. 在Ubuntu系统下安装docker…...
EXCEL 关于plot 折线图--频度折线图的一些细节
目录 0 折线图有很多 1 频度折线图 1.1 直接用原始数据做的频度折线图 2 将原始数据生成数据透视表 3 这样可以做出了,频度plot 4 做按某字段汇总,成为累计plot分布 5 修改上面显示效果,做成百分比累计plot频度分布 0 折线图有很多 这…...
Hive操作案例
目录 idea/dg远程连接导入数据建表数据导入 idea/dg远程连接 hive的详细安装不多展示,自行搜索即可。 依次启动zookeeper,hadoop 在zookeeper的节点上启动如下指令(我的是1个主节点和2个备用节点) 启动Hive的metastore࿰…...
C++ 内存管理和模板与STL
此篇目是之后各种C库的基础 目录 内存管理 内存分布 内存管理方式 new和delete operator new 与 operator delete函数 实现原理 定位new表达式(placement-new) 模板基础 泛型编程 模板 函数模板 类模板 STL 组成部分 内存管理 内存分布 int globalVar 1; //全局变量 静…...
JDK8新特性:Stream
JDK8最大的改变: 1. lambda表达式 2. Stream 1. Steam流的入门 什么是Stream? 也叫Stream流,是jdk8开始的一套API,用于操作集合或者数组中的数据 优点: Stream流大量结合了Lambda的语法风格来创建,提…...
前端传入Grule,后端保存到 .grl 文件中
前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…...
探索《Crypto Rumble》 游戏:经济模型篇
《Crypto Rumble》是一款基于 Zypher Network 游戏引擎打造的卡牌 RPG三消品类的 Web3 游戏,通过引人入胜的游戏设计以及轻量化的游戏玩法,《Crypto Rumble》不仅能够为玩家带来引人入胜的沉浸式游戏体验,同时基于 AI Bot 的游戏编辑器&#…...
【CSS in Depth 2 精译_072】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(上):究竟该用 em 还是 px
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 ✔️ 12.1.1 使用 em 还是 px ✔️12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 文章目录 第 12 章 排版与间距…...
Elasticsearch对象映射
Spring Data Elasticsearch对象映射是将Java对象(域实体)映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。 元模型对象映射 基于元模型的方法使用域类型信息对Elasticsearch进行读写操作…...
Oracle 19c rac 补丁升级,从19.7 to19.22-集群
1. 补丁包概述 数据库环境 角色 数据库 IP地址 数据库版本 主机名 数据库名称 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 将以下补丁包上传到/soft下 上传到两个节点的soft目录下:p6880880_190000_Linux-x86-64.zip (更新o…...
机器学习--Kaggle的使用
机器学习–Kaggle的使用 打开Kaggle: Your Machine Learning and Data Science Community并点击Sign In登录账号 kaggle中自带了很多的数据集 在点击Datasets之后,单点Notebook,如果有适用的数据集可以单击Copy and Edit复制其Notebook,之后…...
客户服务新突破,天润融通助力电动车企业实现数智化转型
近年来,两轮电动车成为年轻人喜爱的出行新方式,借着这种潮流,许多新兴品牌迅速发展,并跻身行业头部。 但问题也随之而来,由于业务快速发展,各类服务问题也开始增多。 比如天润融通服务的一家头部两轮电动…...
力扣题目 - 2931.购买物品的最大开销
题目 还需要你前往力扣官网查看详细的题目要求 地址 思路 这边需要你去力扣官网详细查看题目看了题目提供的示例 已经有了解法, 先把values转成1维数组,排序之后进行累加即可 代码 var maxSpending function (values) {let list values.flat();list.sort((a, b) > a - …...
智慧化工园区自动化在线监测,建立产业链路数字安全网
智慧化工升级国家政策推动安全风险频发 化工园区作为化工产业的核心集聚地,在全球经济中占据重要地位。为推动行业的高质量发展,国家相继发布了《“十四五”危险化学品安全生产规划方案》、《石化化工行业数字化转型实施指南》和《化工园区安全风险智能化…...
在Docker中运行MySQL的思考:挑战与解决方案
引言 在云计算和容器化技术日益普及的今天,Docker作为一种轻量级的容器化平台,已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而,并非所有应用都适合在Docker容器中…...
Linux中所有和$有关的操作
prog < file 命令在 Shell 编程中用于 输入重定向,它将文件的内容作为程序的输入。即,程序 prog 会从文件 file 中读取数据,而不是从标准输入(通常是键盘)读取数据。 基本语法: prog < file 解释&…...
github操作学习笔记(杂乱版)
git开源的分布式版本控制系统: 每次修改文件提交后,都会自动创建一个项目版本 查看git版本看有没有安装成功:git --version 把默认编辑器设置成vim:git config --global core.editor "vim" 1、设置昵称和邮箱ÿ…...
学习思考:一日三问(思考篇)之路由表
学习思考:一日三问(思考篇)之路由表 学了什么(是什么)Destination/Mask(最终目标,寻路必须)Proto(择优可选)Pre(择优可选)Cost&#x…...
多个NVR同时管理EasyNVR:设置了“按需拉流超时”配置但没反应的解决方法
视频监控这一技术在当今社会的应用已然愈发广泛,其影响力渗透至我们生活的方方面面。它不仅为我们带来了更为坚固的安全防线,还在诸多行业领域中发挥着不可替代的作用。 在广泛的应用领域中,NVR录像机汇聚管理EasyNVR凭借其卓越的技术实力与前…...
基于Springboot的实验室管理系统【附源码】
基于Springboot的实验室管理系统 效果如下: 系统登录页面 实验室信息页面 维修记录页面 轮播图管理页面 公告信息管理页面 知识库页面 实验课程页面 实验室预约页面 研究背景 在科研、教育等领域,实验室是进行实验教学和科学研究的重要场所。随着实验…...
【Oracle11g SQL详解】常用字符串函数:`CONCAT`、`SUBSTR`、`LENGTH`、`INSTR` 等
常用字符串函数:CONCAT、SUBSTR、LENGTH、INSTR 等 字符串函数在 SQL 中被广泛用于处理文本数据,例如拼接字符串、提取子串、查找字符位置等。Oracle 11g 提供了强大的字符串函数,可以简化对字符串的操作。 一、CONCAT:拼接字符串…...
某养老产业公司管理诊断项目成功案例纪实
某养老产业公司管理诊断项目成功案例纪实 ——从短期和长期出发,提供转型改革建议 【客户行业】养老行业 【问题类型】问题诊断 【客户背景】 某养老产业公司是一家主要从事养老服务为主的企业,主营业务包括社区养老服务、居家养老、康复训练服务等…...
自然语言处理基础及应用场景
自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…...
网页爬虫技术全解析:从基础到实战
引言 在当今信息爆炸的时代,互联网上的数据量每天都在以惊人的速度增长。网页爬虫(Web Scraping),作为数据采集的重要手段之一,已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...
数据仓库-查看表和数据库的信息
查询表信息 使用系统表pg_tables查询数据库所有表的信息。 SELECT * FROM pg_tables;使用gsql的\d命令查询表结构。 示例:先创建表customer_t1并插入数据。 CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5)…...
【JVM】JVM基础教程(四)
上一章:【JVM】JVM基础教程(三)-CSDN博客 目录 自动垃圾回收 方法区的回收 方法区回收条件 手动触发回收 堆回收 如何判断堆上的对象可以回收? 可以给对象引用赋值null,切断引用 引用计数法 循环引用缺点 查…...
深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)
深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna) 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代,将自然语言查询转化为结构化查询语言(SQL)的能力变得日益重要。无论是小型创业…...
钦州做网站的公司/second是什么意思
一篇奇文出现在某匿名社交软件,引起了大家对文豪的赞口不绝。先发原图:再转原文:发现邻居大部分都是程序员,一开始我还挺高兴,觉得都是高素质的人,环境会很好。但是出事了就发现一个个的特别不靠谱这几天我…...
河北保定建设工程信息网站/最新热点新闻
文章目录前言1.在线翻译2.离线翻译一、多语言离线翻译系统1.开发环境2.准备离线翻译包3.准备python代码4.调试翻译结果5.Python翻译服务对接到.NET Core前言 1.在线翻译 在线翻译,一般是指在线翻译工具,如百度翻译、阿里翻译1688或Google翻译等。这类翻…...
wordpress函数表/百度手机助手苹果版
点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源简介: 表引擎在ClickHouse中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持index、支持的query种类、是否支持主备复制等。引言表引擎在ClickHouse中的…...
腾讯广告联盟/排名seo公司
js的两种使用方式 第一种使用方式:单独写js文件 在static下新建一个js文件并写入内容 alert(这是一个弹窗); 在html文件里面,用script标签引入 <script src"/static/calcolator.js" ></script> 在主程序里面调用html from flask …...
湖北响应式网站建设/百度文库首页
笔记本电脑鼠标动不了怎么办(鼠标没反应怎么解决)鼠标和键盘一样,是辅助我们进行电脑操作的设备,使用没有鼠标的笔记本需要很长时间适应,使用鼠标比较方便,为笔记本配置了一个鼠标,但是比起台式机的鼠标,笔…...
wordpress 2m附件/百度竞价推广点击软件奔奔
CACTI测试OK安装环境:CENTOS5.4提前需要安装的组件:1. mysql2。APACHE3。PHP步骤:一。安装 net-snmpyum install net-snmp*注意加个*,把所有的咚咚都装上,否则没有cacti需要的命令.二。安装 php-snmpyum install php-s…...