C++:默认函数练习——日期类项目的实现

本文通过一个日期类项目,介绍C++中默认成员函数的实现,包括全缺省构造函数、拷贝构造函数和析构函数。讨论了赋值运算符重载的细节,如日期的加减运算、前置++和后置++,以及比较运算符重载。此外,还涉及日期相减的复杂逻辑。
摘要由CSDN通过智能技术生成

一:前言

C++类和对象里面的默认成员函数,如构造函数,拷贝构造赋值重载这些问题虽然说是不难,但是想要写出一个标准的类还是具有一定挑战性的。而编写日期类是一个很好的练手项目

此次的博客,为了更好的练习类与对象,完成了一个日期类的小项目

二:布局

  • Test.cpp用于检验代码的逻辑正确性
  • Date.cpp中存放的是关于函数的实现
  • Date.h中存放的是关于类的声明

需要实现的主要函数如下:

在这里插入图片描述

三:实现

1、默认成员函数实现

虽然没有过多详细介绍,但多多少少也有一定的参考价值

(1)全缺省构造函数

实现的条件限制如下:

  • 年份可以无限大,但是不能小于0
  • 月份最小是1,最大是12
  • 每月的天数有28,29,30,31这四种选择,但本质最特殊还是二月,闰年29天,平年28天

上述最难实现的是最后一点,月份所对应天数的实现。

我们必须实现一个获得当月天数的函数,其实不止是这个构造函数要用,后面的很多函数都要用,所以也可以将其设置为内联函数(inline)

GetMonthDay函数实现过程如下:

int Date::GetMonthDay(int year, int month)
{
   
	int monthDay[] = {
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int day = monthDay[month];
	//当月份为二月时,判断平闰年,是否二月需要+1
	if (month == 2 &&
		(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)))
	{
   
		day += 1;
	}

	return day;
}

基于GetMonthDay函数,实现全缺省的构造函数

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

	if (!(_year >= 0 &&
		_month > 0 && _month < 13 &&
		_day > 0 && _day < GetMonthDay(year, month)))
	{
   
		cout << "日期非法" << endl;
	}
}

(2)拷贝构造函数

拷贝构造函数是构造函数的重载形式。所以很简单,注意this指针

  • Date d2(d1)相当于Date d2=d1
Date::Date(const Date& d)
{
   
	_year = d._year;
	_month = d._month;
	_day = d
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值