C++ 拯救小明(多继承+友元)

该文章描述了一个C++编程问题,要求创建日期类Date、时间类Time和作业类Work,用于表示有拖延症的小明的作业,并通过友元函数判断作业的截止时间顺序。程序读入多个作业的ID和截止时间,找出最早截止的作业并输出。
摘要由CSDN通过智能技术生成


一、题目描述

小明同学有着严重的拖延症,每次老师布置的作业都要到快要截止的时候才会开始动手完成,因此现在有着许许多多的作业完成。你是小明的好朋友,请帮小明找出最紧急的作业(即最早截止的作业)。

要求如下:

1.定义一个日期类Date,包括三个protected成员数据year, month, day;

2.定义一个时间类Time,包括三个protected成员数据hour, minute, second(24小时制);

3.以Date类和Time类为基类,创建一个作业类Work,包括新增成员:int id; // 作业的id

4.定义一个友元函数bool before(const Work& w1,const Work& w2); // 判断作业w1的时间是否早于作业w2的时间。


二、输入与输出

1.输入

输入若干作业,每个作业占一行(作业id 年 月 日 时 分 秒)

当输入0时结束,相应的结果不要输出。

1 2021 9 25 4 5 6
2 2020 6 13 5 7 8
3 2021 8 21 16 7 9
5 2022 7 8 9 10 11
4 2021 7 26 15 25 30
0

2.输出

时间最靠前的作业。

The urgent Work is No.2: 2020/06/13 05:07:08

三、参考代码

#include <iostream>
#include <vector>
#include<string>
#include<cmath>
#include <memory>
#include<iomanip>
using namespace std;

class Date
{
protected:
	int year;
	int mon;
	int day;
public:
	Date(int y,int m,int d):year(y),mon(m),day(d){}
	int getdate()
	{
		return year * 1000 + mon * 100 + day;
	}
};

class Time
{
protected:
	int hour;
	int min;
	int sec;
public:
	Time(int h,int m,int s):hour(h),min(m),sec(s){}
};
class Work :public Date, public Time
{
	int id;
public:
	Work(int y, int m, int d, int h, int m1, int s,int num) :Date(y, m, d), Time(h, m1, s)
	{
		id = num;
	}
	friend bool before(const Work& a, const Work& b) {

		int ad = a.year * 10000 + a.mon * 100 + a.day;
		int at = a.hour * 10000 + a.min * 100 + a.sec;

		int bd = b.year * 10000 + b.mon * 100 + b.day;
		int bt = b.hour * 10000 + b.min * 100 + b.sec;

		if (ad < bd)
		{
			return 1;
		}
		else if (ad > bd)
		{
			return 0;
		}
		else if (ad == bd)
		{
			if (at < bt)
			{
				return 1;
			}
			else
			{
				return 0;
			}
		}

	};
	void pri()
	{
		cout <<"The urgent Work is No."<<id<<": "<< year << "/" << setw(2) << setfill('0') << mon << "/" << day << " " << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << min << ":" << setw(2) << setfill('0') << sec << endl;
	}
};

int main()
{
	int id;
	int y, m, d, h, m1, s;


	cin >>id>> y >> m >> d>>h >> m1 >> s;
	Work a(y, m, d, h,m1, s, id);
	while (cin>>id)
	{
		cin>> y >> m >> d >> h >> m1 >> s;

		Work b(y, m, d, h, m1, s, id);
		if (before(b,a))
		{
			a = b;
		}
	}
	a.pri();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z1Jxxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值