C++ 日期计算器

这篇具有很好参考价值的文章主要介绍了C++ 日期计算器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ 日期计算器,C++,c++,算法,数据结构,c语言,开发语言

概要

本篇主要探究C++ 实现日期计算器

Date类的规划

class Date
{
public:
	int GetMonthDay(int year, int month);
	Date(int year = 2024 , int month = 2, int day = 6);
	Date(const Date& d);
	Date& operator=(const Date& d);
	~Date();
	Date& operator+=(int day);
	Date operator+(int day);
	Date operator-(int day);
	Date& operator-=(int day);
	Date& operator++();
	Date operator++(int);
	Date operator--(int);
	Date& operator--();
	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;
	int operator-(const Date& d) const;
	void Print();

private:
	int _year;
	int _month;
	int _day;
};

Date类的实现

Date 构造函数

Date::Date(int year, int month, int day)
	:_year(year)
	, _month(month)
	, _day(day)
{ }

构造函数,他是在创建类的时候调用进行初始化操作,我们这里声明与定义分离,所以它的参数不需要填写缺省值,缺省值在声明的时候定义即可。

Date 拷贝构造函数

Date::Date(const Date& x)
	:_year(x._year)
	, _month(x._month)
	, _day(x._day)
{ }

拷贝构造函数和构造函数作用相似,拷贝构造函数是将已有的类的对象拷贝给新创建的类的对象,如上所示。

~Date 析构函数

Date::~Date()
{
	_year = _month = _day = 0;
}

构析函数是在对象即将销毁前所调用的函数,常用来清理数据空间,这里我们的内存都在栈上申请的,所以影响不大。

GetMonthDay 求某年某月的天数

int Date::GetMonthDay(int year,int month)
{
	int a[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 a[month];
}

该函数是用来求某年某月的月份天数,通过创建一个大小为13的数组a, 再对二月份进行判断闰年来确定是否为特殊情况,否则返回已设定好的月份天数。

operator= 赋值操作符重载

Date& Date::operator=(const Date& d)
{
	_year=d._year;
	_month=d._month;
	_day=d._day;
	return *this;
}

该函数用于对象与对象之间的赋值操作,在对象的年月日进行逐一复制后并返回this指针的解引用。

operator+= 加等操作符重载

Date& Date::operator+=(int day)
{
	_day+=day;
	int time=GetMonthDay(_year,_month);
	while(_day>time)
	{
		_day-=time;
		_month++;
		if(_month>12)
		{
			_month-=12;
			_year++;
		}
		time = GetMonthDay(_year,_month);
	}
	return *this;
}

该函数用于日期与天数的相加,在实现该函数时先将this->_day加上想加的day。然后再通过月份的天数以及月与年的关系进行调整,如上所示。

operator+ 加号操作符重载

Date Date::operator+(int day)
{
	Date newdate = *this;
	newdate+=day;
	return newdate;
}

通过复用加等操作符重载,在不改变*this的情况下,返回相加后的对象

operator-= 减等操作符重载

Date& Date::operator(int day)
{
	_day-=day;
	int time =GetMonthDay(_year,_month)
	while(_day>=0)
	{
		_day+=time;
		_month--;
		if(_month<=1)
		{
			_month+=12;
			_year--;
		}
		time=GetMonthDay(_year,_month);
	} 
	return *this;
}

该函数和加等操作符重载类似,先将this->_day减去day,然后进行月份的天数和年与月之间的调整即可。

operator- 减法操作符重载 (日期 - 天数)

Date Date::operator-(int day)
{
	Date newdate=*this;
	newdate-=day;
	return newdate;
}

通过复用减等操作符重载,在不改变*this的情况下,返回相加后的对象

operator++ 前置自增操作符重载

Date& Date::operator++()
{
	(*this)+=1;
	return *this;
}

operator++ 后置自增操作符重载

Date Date::operator--(int)
{
	Date a = *this;
	(*this)+=1;
	return a;
}

operator-- 前置自减操作符重载

Date& Date::operator--()
{	
	(*this)-=1;
	return *this;
}

operator-- 后置自减操作符重载

Date Date::operator--(int)
{	
	Date a=*this;
	(*this)-=1;
	return a;
}

operator< 小于操作符重载

bool Date::operator<(const Date& d)
{
	if(_year<d._year)
	{
		return 1;
	}
	else if(_year==d._year)
	{
		if(_month<d._month)
		{
			return 1;
		}
		else if(_month==d._month)
		{
			if(_day<d._day)
			{
				return 1;
			}
		}
	}
	return 0;
}

operator== 相等操作符重载

bool Date::operator==(const Date& d)
{
	return _day==d._day&&_month==d._month&&_year==d._year;
}

operator!= 不等操作符重载

bool Date::operator!=(const Date& d)
{
	return !(*this==d);
}

operator<= 小于或等于操作符重载

bool Date::operator<=(const Date& d)
{
	return (*this<d)||(*this==d);
}

operator> 大于操作符重载

bool Date::operator>(const Date& d)
{
	return !(*this<=d);
}

operator>= 大于或等于操作符重载

bool Date::operator>=(const Date& d)
{
	return !(*this<d);
}

operator- 减法操作符重载(日期 - 日期)

int operator-(const Date& date) const
{
	Date max = *this,min = date;
	int flag=(max>=min);
	if(!flag)
	{
		max=date;
		min=*this;
		flag=-1;
	}
	int count=0;
	while(max>min)
	{
		min++;
		count++;
	}
	return flag*count;
}

通过比较选出最大的日期max与最小的日期min,让最小的日期min和记录数的count进行循环自增,直到max与min相等为止,此时刻的count就是相差的天数,而flag先前用于比较的就是它的符号,所以返回flag*count。

Print 打印函数

void Date::Print()
{
	printf("%d %d %d\n",_year,_month,_day);
}

Date 类的测试

测试操作符重载(+,+=,- ,-=,x++,++x,x–,–x)

void Test_1()
{
	std::cout << "Test_1:\n";
	Date a(2024, 2, 6);
	std::cout << "a ||";
	a.Print();
	Date b = a;
	std::cout << "b ||";
	b.Print();
	b += 30;
	std::cout << "b += 30 ||";
	b.Print();
	a -= 20;
	std::cout << "a -= 20 ||";
	a.Print();
	Date c = b - 30;
	std::cout << "c 或 b - 30 ||";
	c.Print();
	Date d = a + 20;
	std::cout << "d 或 a + 20 ||";
	d.Print();
	d++;
	std::cout << "++d ||";
	d.Print();
	c--;
	std::cout << "++c ||";
	c.Print();
	Date e = a++;
	std::cout << "e = a++ -> e||";
	e.Print();
	std::cout << "e = a++ -> a||";
	a.Print();
	Date f = a++;
	std::cout << "f = b-- -> f||";
	f.Print();
	std::cout << "f = b-- -> b||";
	b.Print();

	std::cout << "\n";
}

运行结果如下:
C++ 日期计算器,C++,c++,算法,数据结构,c语言,开发语言

测试操作符重载(>,>=,==,<,<=,!=)

void Test_2()
{
	std::cout << "Test_2:\n";
	Date a(2024, 2, 6);
	std::cout << "a ||";
	a.Print();
	Date b = a + 999;
	std::cout << "b ||";
	b.Print();
	Date c = a - 999;
	std::cout << "c ||";
	c.Print();
	Date d = a;
	std::cout << "d ||";
	d.Print();

	std::cout << "a < b  ->" << (a < b) << std::endl;
	std::cout << "a > b  ->" << (a > b) << std::endl;
	std::cout << "a == b ->" << (a == b) << std::endl;
	std::cout << "a != b ->" << (a != b) << std::endl;

	std::cout << "a < c  ->" << (a < c) << std::endl;
	std::cout << "a > c  ->" << (a > c) << std::endl;
	std::cout << "a == c ->" << (a == c) << std::endl;
	std::cout << "a != c ->" << (a != c) << std::endl;

	std::cout << "a == d ->" << (a == d) << std::endl;
	std::cout << "a != d ->" << (a != d) << std::endl;
	std::cout << "a >= d ->" << (a >= d) << std::endl;
	std::cout << "a <= d ->" << (a <= d) << std::endl;
	std::cout << "a < d  ->" << (a < d) << std::endl;
	std::cout << "a > d  ->" << (a > d) << std::endl;

	std::cout << "\n";
}

运行结果如下:
C++ 日期计算器,C++,c++,算法,数据结构,c语言,开发语言

测试操作符重载(日期 - 日期)

void Test_3()
{
	std::cout << "Test_3:\n";
	Date a(2024, 2, 6);
	Date b(2025, 2, 6);
	Date c = a + 99;
	std::cout << "c ||";
	c.Print();

	std::cout << "a ||";
	a.Print();
	std::cout << "b ||";
	b.Print();

	std::cout << "a - b ||" << (a - b) << std::endl;
	std::cout << "b - b ||" << (b - b) << std::endl;
	std::cout << "b - a ||" << (b - a) << std::endl;

	std::cout << "c - a ||" << (c - a) << std::endl;
	std::cout << "a - c ||" << (a - c) << std::endl;

	std::cout << "\n";
}

运行结果如下:
C++ 日期计算器,C++,c++,算法,数据结构,c语言,开发语言
测试完毕,综合上述代码及运行结果,可得代码正确,可以正常模拟日期计算器。

结语

以上就是本期的全部内容了,喜欢就多多关注吧!!!文章来源地址https://www.toymoban.com/news/detail-832405.html

到了这里,关于C++ 日期计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++]日期类计算器的模拟实现

    目录 日期类计算器的模拟实现::                                                 1.获取某年某月的天数                                                 2.构造函数                                                 3.拷贝构造函数                      

    2024年02月03日
    浏览(64)
  • 【C++小项目】实现一个日期计算器

    目录 Ⅰ. 引入 Ⅱ. 列轮廓 Ⅲ. 功能的实现 构造函数 Print 判断是否相等 == | != ➡️==: ➡️!=: 判断大小 | = | | = ➡️: ➡️=: ➡️=: ➡️: 加减天数 + | += | - | -= ➡️+=: ➡️+: ➡️-: ➡️-=: 自增/自减 ++ | -- ➡️前置++ ➡️后置++ ➡️前置-- ➡️后置-- 日期减日期 ➡

    2024年02月11日
    浏览(33)
  • C++奇迹之旅:从0开始实现日期时间计算器

    通过前面学完了 C++ 的默认成员函数,实践出真知,本小节我们将一起来实现一个简单上手的日期时间计算器,阿森和你一起一步一步的操作实现! 完整代码在文章末尾哦 为了代码的维护性和可观型,我们在设置三个文件头文件 Date.h ,源文件 Date.cpp , Test.cpp 我们先把头文

    2024年04月28日
    浏览(24)
  • 【C++初阶】第三站:类和对象(中) -- 日期计算器

    目录 前言 日期类的声明.h 日期类的实现.cpp 获取某年某月的天数 全缺省的构造函数 拷贝构造函数 打印函数 日期 += 天数 日期 + 天数 日期 -= 天数 日期 - 天数 前置++ 后置 ++ 前置 -- 后置-- 日期类中比较运算符的重载 运算符重载 ==运算符重载 != 运算符重载 =运算符重载 运算符

    2024年02月19日
    浏览(31)
  • 数据结构——布隆计算器

    1.什么是布隆过滤器? 布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效

    2024年02月11日
    浏览(30)
  • 数据结构Demo——简单计算器

    本项目实现了一个通过网页访问的简单计算器,它可以对带括号的加减乘除表达式进行计算并将计算结果返回给用户,并且可以对用户输入的表达式进行合法性判断,以下是项目的界面展示: 使用者可以通过点击网页上的按钮来输入一个算数表达式,之后点击等于号便可以将

    2024年02月07日
    浏览(23)
  • 数据结构——基本计算器的实现

             目录 一、不带括号的计算器 1.整体思想: 2.具体细节:         (1)字符串中有空格         (2)表达式开头可能是符号         (3)将数字放在第一个栈中         (4)出现“*”和“/”         (5)出现“+”和“-”         (6)完成运算 3.完整

    2024年01月22日
    浏览(25)
  • 在线推算两个日期相差天数的计算器

     具体请前往:在线推算两个日期相差天数的计算器

    2024年02月14日
    浏览(37)
  • C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    你已经学习了 cout 用于输出(打印)值。现在我们将使用 cin 来获取用户输入。 cin 是一个预定义变量,它使用提取运算符( )从键盘读取数据。 在下面的示例中,用户可以输入一个数字,该数字存储在变量 x 中。然后我们打印 x 的值: 示例 需要注意的是: cout 的发音是

    2024年03月26日
    浏览(30)
  • MFC基于对话框——仿照Windows计算器制作C++简易计算器

    目录 一、界面设计 二、设置成员变量 三、初始化成员变量  四、初始化对话框 ​五、添加控件代码 1.各个数字的代码(0~9) 2.清除功能的代码 3.退格功能的代码 4.加减乘除功能的代码 5.小数点功能的代码 6.正负号功能的代码 7.等于功能的代码 六、源码领取方式 制作好之后

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包