【C++】:日期类实现

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

前言:

1. 基本构造

2. 基础运算符重载

3. 进阶运算符重载

3.1 日期+天数

3.2 日期-天数

3.3 日期+、-天数的优化版本

3.4 前置++、后置++、前置--、后置--

3.5 日期与日期相差天数

4. 流提取、流插入运算符重载

4.1 流插入

完整的优化代码:

4.2 流提取

5. 完整代码


前言:

承接上篇的类和对象本期我们来实现一下日期类,顺便再来回顾一下构造函数和运算符的重载,关于基本的运算符重载就不做过多的解释,之前没提到过的会在这里重点解释。

1. 基本构造

日期类的实现我们采用分文件来进行实现:

在头文件 Date.h中实现日期类的基本框架

在源文件 Date.cpp中实现框架逻辑

在源文件 Test.cpp中实现测试逻辑

日期类的基本创建只需要写出构造函数和打印函数即可,因为日期类中没有资源的创建与释放,所以编译器自动生成的析构函数拷贝构造以及&运算符重载足够使用。

头文件 :Date.h

//日期类
class Date
{
public://不涉及内部数据的修改的函数可以加上const修饰//拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//打印函数void Print() const;
private:int _year;  //年int _month; //月int _day;   //日
};

源文件:Date.cpp

//拷贝构造函数(全缺省)
Date::Date(int year, int month, int day)
{_year = year;_month = month;_day = day;
}//打印函数
void Date::Print() const
{cout << _year << "/" << _month << "/" << _day << endl;
}

2. 基础运算符重载

基础运算符的重载包括==、!=、<、<=、>、>=,这几个运算符重载比较简单,在这里就不做解析。

头文件:Date.h

//日期类
class Date
{
public://不涉及内部数据的修改的函数可以加上const修饰//拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//打印函数void Print() 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;//>运算符重载bool operator>(const Date& d) const;//>=运算符重载bool operator>=(const Date& d) const;private:int _year;  //年int _month; //月int _day;   //日
};

源文件 :Date.cpp

//==运算符重载
bool Date::operator==(const Date& d) const
{return _year == d._year&& _month == d._month&& _day == d._day;
}
//!=运算符重载
bool Date::operator!=(const Date& d) const
{return !(*this == d);
}
//<运算符重载
bool Date::operator<(const Date& d) const
{if (_year < d._year){return true;}else if (_year == d._year && _month < d._month){return true;}else if (_year == d._year && _month == d._month && _day < d._day){return true;}else{return false;}
}
//<=运算符重载
bool Date::operator<=(const Date& d) const
{return *this == d || *this < d;
}
//>运算符重载
bool Date::operator>(const Date& d) const
{return !(*this <= d);
}
//>=运算符重载
bool Date::operator>=(const Date& d) const
{return !(*this < d);
}

3. 进阶运算符重载

基础的运算符重载只能满足一部分的需求,还需要对日期的加减。

3.1 日期+天数

一个日期+一个天数即可得到另外的一个日期,这里就存在一个天数满了进位月份,月份满了进位年份,那么就需要一个另外的函数来获取某一月的天数。

获取天数函数:

//获取某一个月的天数
int Date::GetMonthDay(int year, int month) const
{const static int MonthArray[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2&& (year % 4 == 0 && year % 100 != 0) || year % 400 == 0){return 29;}return MonthArray[month];
}

 首先判断是否为闰年,然后根据月份返回相对应的天数。

日期+天数代码:

头文件:Date.h

//日期类
class Date
{
public://拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//获取某一个月的天数int GetMonthDay(int year, int month) const;//+=运算符重载Date& operator+=(int day);//+运算符重载Date operator+(int day) const;
private:int _year;  //年int _month; //月int _day;   //日
};

源文件:Date.cpp


//获取某一个月的天数
int Date::GetMonthDay(int year, int month) const
{const static int MonthArray[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2&& (year % 4 == 0 && year % 100 != 0) || year % 400 == 0){return 29;}return MonthArray[month];
}
//+=运算符重载
Date& Date::operator+=(int day)
{_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) const
{//构造一个新的DateDate tmp(*this);tmp += day;return tmp;
}

3.2 日期-天数

头文件:Date.h

//日期类
class Date
{
public://拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//获取某一个月的天数int GetMonthDay(int year, int month) const;//-=运算符重载Date& operator-=(int day);//-运算符重载Date operator-(int day) const;
private:int _year;  //年int _month; //月int _day;   //日
};

源文件:Date.cpp

//获取某一个月的天数
int Date::GetMonthDay(int year, int month) const
{const static int MonthArray[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2&& (year % 4 == 0 && year % 100 != 0) || year % 400 == 0){return 29;}return MonthArray[month];
}
//-=运算符重载
Date& Date::operator-=(int day)
{_day -= day;while (_day <= 0){//向月份借位--_month;if (_month == 0){//向年份借位--_year;_month = 12;}_day += GetMonthDay(_year, _month);}return *this;
}
//-运算符重载
Date Date::operator-(int day) const
{Date tmp(*this);tmp -= day;return tmp;
}

 3.3 日期+、-天数的优化版本

上面实现的这两个运算符重载还是有一定的缺陷的,万一有的人在+天数时传递负值就会出现问题,如果有人在-天数的时候传递负值也是会出现bug,那么就需要再次进行优化。

当使用日期+天数时传递负值直接复用-=操作 

当使用日期-天数时传递负值直接复用+=操作 

//+=运算符重载
Date& Date::operator+=(int day)
{//负值天数操作if (day < 0){return *this -= (-day);}_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)
{//负值天数操作if (day < 0){return *this += (-day);}_day -= day;while (_day <= 0){//向月份借位--_month;if (_month == 0){//向年份借位--_year;_month = 12;}_day += GetMonthDay(_year, _month);}return *this;
}

3.4 前置++、后置++、前置--、后置--

上篇的文章中提到过前置和后置的区别就是后置++多了一个int参数

头文件:Date.h

//日期类
class Date
{
public://前置++运算符重载Date& operator++();//后置++运算符重载Date operator++(int) const;//前置--运算符重载Date& operator--();//后置--运算符重载Date operator--(int) const;
private:int _year;  //年int _month; //月int _day;   //日
};

源文件:Date.cpp

//前置++运算符重载
Date& Date::operator++()
{*this += 1;return *this;
}
//后置++运算符重载
Date Date::operator++(int) const
{Date tmp(*this);tmp += 1;return tmp;
}
//前置--运算符重载
Date& Date::operator--()
{*this -= 1;return *this;
}
//后置--运算符重载
Date Date::operator--(int) const
{Date tmp(*this);tmp -= 1;return tmp;
}

3.5 日期与日期相差天数

日期与日期相差天数也是使用-的运算符重载,日期-日期这里可以直接减,也可以使用两个日期同时减去2000年1月1日,然后根据差值计算天数,需要注意的是日期-日期是会出现负数的。还有一种比较简单的方法计数法:设置一个标志值记录正负,然后记录两个日期当中最大的一个日期,然后设置一个计数值,将小日期加1,同时也将计数值加1,直到小日期加到和大日期相等,那么此时这个计数值就是它们之间相差的日期。

源文件:Date.cpp

//日期-日期
int Date::operator-(const Date& d) const
{Date dmax = *this;Date dmin = d;int flag = 1;  //记录正负//找出较大的日期if (*this < d){dmax = d;dmin = *this;flag = -1;}//设置计数值int coutN = 0;while (dmin != dmax){++dmin;++coutN;}//将差值再*记录值return coutN * flag;
}

4. 流提取、流插入运算符重载

如果我们使用cout来直接打印日期类的话是不能打印的,同样的使用cin来对日期类输入也是不支持的,因为日期类是不属于内置类型的,如果我们也要像内置类型一样使用cin和cout就需要对>>(流提取)<<(流插入)进行重载

cin是一个istream类中的对象,内置类型能使用流提取的原因就是库里面将内置类型都进行重载了。

cout是一个ostream类中的对象

4.1 流插入

我们要实现自定义类型的流插入就需要用到库里面的流插入来进行辅助:

//头文件:Date.h//日期类
class Date
{
public: //拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//打印函数//流插入void operator<<(ostream& out);private:int _year;  //年int _month; //月int _day;   //日
};//源文件:Date.cpp
//流插入
void Date::operator<<(ostream& out)
{out << _year << "/" << _month << "/" << _day << endl;
}

如果这样子写的话会出现一个问题:我们正常调用会调用不了:

类成员函数的第一个参数是隐藏的this指针,所以正常调用的话跟重载的顺序不匹配:

实现为这样非要调用的话只需要将顺序换一下即可:

但是这样子调用又不符合日常调用习惯,所以我们需要将两个参数的位置调换,但是类成员函数的第一个函数是默认隐藏的,所以需要调换的话就需要写为全局运算符重载函数,但是设为全局又存在一个新的问题,类中的私有函数在类外面不能访问,这里有两种方法:

1. 使用单独的函数将年份、月份、天数都分别保存起来直接使用。

2. 将流插入运算符重载设置为友元函数

在这里我们使用第二种方法:

//头文件:Date.h
//日期类
class Date
{//友元声明friend void operator<<(ostream& out, const Date& d);public://拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//...
private:int _year;  //年int _month; //月int _day;   //日
};//流插入
void operator<<(ostream& out, const Date& dt);//源文件:Date.cpp
//流插入
void operator<<(ostream& out, const Date& d)
{out << d._year << "/" << d._month << "/" << d._day << endl;
}

这样写的话还是存在一个小小的问题:每次输出的话只能一个一个日期类进行输出,不能一次性输出多个:

这个问题的主要原因是前面的输出d1是一个正常的运算符重载,而这个运算符重载的返回值又是void,而接下来的运算符重载不认识void类型,所以需要返回一个ostream类型才能完成下面的输出。

完整的优化代码:

头文件:Date.h

//日期类
class Date
{//友元声明friend ostream& operator<<(ostream& out, const Date& d);public://不涉及内部数据的修改的函数可以加上const修饰//拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//...
private:int _year;  //年int _month; //月int _day;   //日
};//流插入
ostream& operator<<(ostream& out, const Date& d);

源文件:Date.cpp

//流插入
ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "/" << d._month << "/" << d._day << endl;return out;
}

4.2 流提取

cin是一个istream类中的对象,所以我们可以借助istream来实现对于日期类的输入:

头文件:Date.h

//日期类
class Date
{//友元声明friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);public://不涉及内部数据的修改的函数可以加上const修饰//拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//...
private:int _year;  //年int _month; //月int _day;   //日
};//流插入
ostream& operator<<(ostream& out, const Date& d);
//流提取
istream& operator>>(istream& in, Date& d);

源文件:Dtae.cpp


//流插入
ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "/" << d._month << "/" << d._day << endl;return out;
}
//流提取
istream& operator>>(istream& in, Date& d)
{in >> d._year >> d._month >> d._day;return in;
}

5. 完整代码

头文件:Date.h

#pragma once
#include <iostream>
using namespace std;//日期类
class Date
{//友元声明friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);public://不涉及内部数据的修改的函数可以加上const修饰//拷贝构造函数(全缺省)Date(int year = 1949, int month = 10, int day = 1);//打印函数void Print() const;//获取某一个月的天数int GetMonthDay(int year, int month) 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;//>运算符重载bool operator>(const Date& d) const;//>=运算符重载bool operator>=(const Date& d) const;//+=运算符重载Date& operator+=(int day);//+运算符重载Date operator+(int day) const;//-=运算符重载Date& operator-=(int day);//-运算符重载Date operator-(int day) const;//前置++运算符重载Date& operator++();//后置++运算符重载Date operator++(int) const;//前置--运算符重载Date& operator--();//后置--运算符重载Date operator--(int) const;//日期-日期int operator-(const Date& d) const;
private:int _year;  //年int _month; //月int _day;   //日
};//流插入
ostream& operator<<(ostream& out, const Date& d);
//流提取
istream& operator>>(istream& in, Date& d);

源文件:Date.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include"Date.h"//拷贝构造函数(全缺省)
Date::Date(int year, int month, int day)
{_year = year;_month = month;_day = day;
}
//打印函数
void Date::Print() const
{cout << _year << "/" << _month << "/" << _day << endl;
}//==运算符重载
bool Date::operator==(const Date& d) const
{return _year == d._year&& _month == d._month&& _day == d._day;
}
//!=运算符重载
bool Date::operator!=(const Date& d) const
{return !(*this == d);
}
//<运算符重载
bool Date::operator<(const Date& d) const
{if (_year < d._year){return true;}else if (_year == d._year && _month < d._month){return true;}else if (_year == d._year && _month == d._month && _day < d._day){return true;}else{return false;}
}
//<=运算符重载
bool Date::operator<=(const Date& d) const
{return *this == d || *this < d;
}
//>运算符重载
bool Date::operator>(const Date& d) const
{return !(*this <= d);
}
//>=运算符重载
bool Date::operator>=(const Date& d) const
{return !(*this < d);
}//获取某一个月的天数
int Date::GetMonthDay(int year, int month) const
{const static int MonthArray[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2&& (year % 4 == 0 && year % 100 != 0) || year % 400 == 0){return 29;}return MonthArray[month];
}
//+=运算符重载
Date& Date::operator+=(int day)
{//负值天数操作if (day < 0){return *this -= (-day);}_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) const
{//构造一个新的DateDate tmp(*this);tmp += day;return tmp;
}//-=运算符重载
Date& Date::operator-=(int day)
{//负值天数操作if (day < 0){return *this += (-day);}_day -= day;while (_day <= 0){//向月份借位--_month;if (_month == 0){//向年份借位--_year;_month = 12;}_day += GetMonthDay(_year, _month);}return *this;
}
//-运算符重载
Date Date::operator-(int day) const
{Date tmp(*this);tmp -= day;return tmp;
}//前置++运算符重载
Date& Date::operator++()
{*this += 1;return *this;
}
//后置++运算符重载
Date Date::operator++(int) const
{Date tmp(*this);tmp += 1;return tmp;
}
//前置--运算符重载
Date& Date::operator--()
{*this -= 1;return *this;
}
//后置--运算符重载
Date Date::operator--(int) const
{Date tmp(*this);tmp -= 1;return tmp;
}//日期-日期
int Date::operator-(const Date& d) const
{Date dmax = *this;Date dmin = d;int flag = 1;  //记录正负//找出较大的日期if (*this < d){dmax = d;dmin = *this;flag = -1;}//设置计数值int coutN = 0;while (dmin != dmax){++dmin;++coutN;}//将差值再*记录值return coutN * flag;
}//流插入
ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "/" << d._month << "/" << d._day << endl;return out;
}
//流提取
istream& operator>>(istream& in, Date& d)
{in >> d._year >> d._month >> d._day;return in;
}

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,欲知后事如何,请听下回分解~,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/154110.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium图标漂移分析与解决

漂移现象如下 什么是图标漂移&#xff1f; 随着视野改变&#xff0c;图标相对于地面发生了相对位置的变化 让人感觉到图标有飘忽不定的感觉 原因分析 图标是静止的&#xff0c;它的位置在世界坐标系中是绝对的、静止的。 漂移大部分的原因是&#xff1a; 透视关系发生了错…

增强LLM:使用搜索引擎缓解大模型幻觉问题

论文题目&#xff1a;FRESHLLMS:REFRESHING LARGE LANGUAGE MODELS WITH SEARCH ENGINE AUGMENTATION 论文地址&#xff1a;https://arxiv.org/pdf/2310.03214.pdf 论文由Google、University of Massachusetts Amherst、OpenAI联合发布。 大部分大语言模型只会训练一次&#…

gin 框架的 JSON Render

gin 框架的 JSON Render gin 框架默认提供了很多的渲染器&#xff0c;开箱即用&#xff0c;非常方便&#xff0c;特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render&#xff0c;那么它们的区别是什么呢&#xff1f; // JSON contains the given interface obje…

三、WebGPU Uniforms

三、WebGPU Uniforms Uniform有点像着色器的全局变量。你可以在执行着色器之前设置它们的值&#xff0c;着色器的每次迭代都会有这些值。你可以在下一次请求GPU执行着色器时将它们设置为其他值。我们将再次从第一篇文章中的三角形示例开始&#xff0c;并对其进行修改以使用一些…

【初识Jmeter】【接口自动化】

jmeter的使用笔记1 Jmeter介绍与下载安装介绍安装配置配置与扩展组件 jmeter的使用基本功能元素登陆请求与提取cookie其他请求接口关联Cookie-响应成功聚合报告查看 Jmeter介绍与下载安装 介绍 jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&…

nio 文件传输

transferto方法一次只能传输2个g的数据 文件大于2个g时

C# Windows 窗体控件中的边距和填充

可以将 Margin 属性、Left、Top、Right、Bottom 的每个方面设置为不同的值&#xff0c;也可以使用 All 属性将它们全部设置为相同的值。 在代码中设置Margin&#xff0c;元素的左边设置为5个单位、上边设置为10个单位、右边设置为15个单位和下边设置为20个单位。 TextBox myT…

Java学数据结构(4)——PriorityQueue(优先队列) 二叉堆(binary heap)

前言 数据结构与算法作为计算机科学的基础&#xff0c;是一个重点和难点&#xff0c;在实际编程中似乎看不它们的身影&#xff0c;但是它们有随处不在&#xff0c;如影随形。 本系列博客是《数据结构与算法分析—Java语言描述》的读书笔记&#xff0c;合集文章列表如下&#…

数据安全防护:云访问安全代理(CASB)

云访问安全代理&#xff08;Cloud Access Security Broker&#xff0c;CASB&#xff09;&#xff0c;是一款面向应用的数据防护服务&#xff0c;基于免应用开发改造的配置方式&#xff0c;提供数据加密、数据脱敏功能。数据加密支持国密算法&#xff0c;提供面向服务侧的字段级…

Springboot+vue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的企业OA管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业OA管理系统&#xff0c;采用M&#xff08;m…

【电商API接口的应用:电商数据分析入门】初识Web API(一)

如何使用Web应用变成接口(API)自动请求网站到特定信息而不是整个网站&#xff0c;再对这些信息进行可视化。由于这样编写到程序始终使用最新到数据来生成可视化&#xff0c;因此即便数据瞬息万变&#xff0c;它呈现到信息也都是最新的。 使用Web API Web API是网站的一部分&am…

揭秘 Go 中的 new() 和 make() 函数

Go&#xff08;或 Golang&#xff09;是一种现代、静态类型、编译型的编程语言&#xff0c;专为构建可扩展、并发和高效的软件而设计。它提供了各种内置的函数和特性&#xff0c;帮助开发人员编写简洁高效的代码。其中包括 new() 和 make() 函数&#xff0c;这两个函数乍看起来…

有哪些值得推荐的Java 练手项目?

大家好&#xff0c;我是 jonssonyan 我是一名 Java 后端程序员&#xff0c;偶尔也会写一写前端&#xff0c;主要的技术栈是 JavaSpringBootMySQLRedisVue.js&#xff0c;基于我学过的技术认真的对每个分享的项目进行鉴别&#xff0c;今天就和大家分享我曾经用来学习的开源项目…

【置顶】关于博客的一些公告

所谓 万事开头难&#xff0c;最开始的两个专栏 《微机》 和 《骨骼动作识别》 定价 29.9 &#xff0c;因为&#xff1a; 刚开始确实比较困难&#xff0c;要把自己学的知识彻底搞懂讲给别人&#xff0c;还要 码字排版&#xff0c;从 Markdown 语法开始学起&#xff08;这都是 花…

【Java 进阶篇】CSS 属性

当你学习CSS时&#xff0c;了解CSS属性是非常重要的&#xff0c;因为这些属性控制了网页上元素的外观和布局。本文将详细介绍一些常见的CSS属性&#xff0c;包括文本属性、盒子模型属性、背景和边框属性、定位属性等。我们还将为每个属性提供示例代码&#xff0c;以便你更好地理…

Go 复合类型之字典类型介绍

Go 复合类型之字典类型介绍 文章目录 Go 复合类型之字典类型介绍一、map类型介绍1.1 什么是 map 类型&#xff1f;1.2 map 类型特性 二.map 变量的声明和初始化2.1 方法一&#xff1a;使用 make 函数声明和初始化&#xff08;推荐&#xff09;2.2 方法二&#xff1a;使用复合字…

家政服务行业做开发微信小程序可以实现什么功能

家政服务行业开发微信小程序可以实现多种功能&#xff0c;从而提升服务品质和效率&#xff0c;下面我们来详细介绍一些可能实现的功能。 一、展示服务信息 家政服务微信小程序可以展示各种服务信息&#xff0c;包括各类家政服务项目、价格、服务流程、服务人员信息等。用户可以…

【pycharm】控制台报错:终端无法加载文件\venv\Scripts\activate.ps1

目录 一、在pycharm控制台输入 二、在windows的power shell &#xff08;以管理员方式打开&#xff09; 三、 在pycharm控制台输入 四、重新打开pycharm即可 前言&#xff1a;安装pycharm2022-03版本出现的终端打开报错 一、在pycharm控制台输入 get-executionpolicy …

S7-1200PLC与昆仑通态触摸屏通讯

测试环境&#xff1a;Win10、MCGS、博图V16、1214DCDCDC 博途工控人平时在哪里技术交流博途工控人社群 博途工控人平时在哪里技术交流博途工控人社群 将PLC端做如下配置 1-MCGS配置S7-1200驱动 1.1-添加驱动 双击设备窗口 点击设备组态窗口下的设备管理&#xff0c;选择西门…

Easysearch Chart 0.2.0都有哪些变化

Easysearch Chart 包更新了&#xff0c;让我们来看看都有哪些变化&#xff1a; Docker 镜像升级 Service 名称调整&#xff0c;支持 NodePort 模式部署 现在让我们用 NodePort 模式部署一下&#xff1a; # helm search repo infinilabs NAME CHART VERSION …