C++: 日程安排(多继承+友元函数)
题目描述
已有一个日期类Date,包括三个protected成员数据year,month,day;
另有一个时间类Time,包括三个protected成员数据hour,minute,second,12小时制;
现需根据输入的日程的日期时间,安排前后顺序,为此以Date类和Time类为基类,建立一个日程类Schedule,包括以下新增成员:
int ID;//日程的ID
定义友元函数bool before(const Schedule & s1,const Schedule & s2);//判断日程s1时间是否早于日程s2。
编写主函数,根据输入的各项日程信息,建立日程对象,找出需要最早安排的日程(日期和时间相等时,输出较早建立的日程),并输出该日程对象的信息。
输入
测试输入包含若干日程,每个日程占一行(日程ID 日程日期 日程时间)。
当读入0时输入结束,相应的结果不要输出。
输出
时间最靠前的日程
样例输入
1 2019 6 27 8 0 1 2 2019 6 28 8 0 1 3 2020 1 1 8 0 0 0
样例输出
The urgent schedule is No.1: 2019/06/27 08:00:01
提示
在两个日程完全相同的情况下,输出前面那一个
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
class Date {
protected:int year, month, day;
public:Date(int a = 0, int b = 0, int c = 0) :year(a), month(b), day(c) {};};class Time {
protected:int hour, minute, second;
public:Time(int a = 0, int b = 0, int c = 0) :hour(a), minute(b), second(c) {};};class Schedule :public Date,public Time {
protected:int id;
public:Schedule(const Date& p,const Time&q,int ID=0) :Date(p),Time(q),id(ID) {}friend Schedule compare(const Schedule& S1, const Schedule& S2);void show() {cout << "The urgent schedule is No." << id << ": " << year << "/" << setw(2) << setfill('0') << month << "/" << setw(2) << setfill('0') << day<<" ";cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;}//定义一个函数输出
};
Schedule compare(const Schedule& S1, const Schedule& S2) {int sum1, sum2;sum1 = S1.year * 10000 + S1.month * 100 + S1.day + S1.hour * 3600 + S1.minute * 60 + S1.second;sum2 = S2.year * 10000 + S2.month * 100 + S2.day + S2.hour * 3600 + S2.minute * 60 + S2.second;if (sum1 > sum2) { return S2; }if (sum1 <= sum2) { return S1; }//根据提示:相同时输出前面的number}int main() {int id, y, m, d, h, ms, s;int id1, y1, m1, d1, h1, ms1, s1;cin >> id;if (id == 0) { return 0; }cin >> y >> m >> d >> h >> ms >> s;Date D1(y, m, d);Time T1(h, ms, s);Schedule S1(D1, T1, id);for (;;) {cin >> id;if (id == 0) { break; }cin >> y >> m >> d >> h >> ms >> s;Date D2(y, m, d);Time T2(h, ms, s);Schedule S2(D2, T2, id);S1=compare(S1, S2);}S1.show();
}
C++: 日程安排(多继承+友元函数)相关推荐
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- c++模板---3(类模板碰到继承问题,类模板类外实现,类模板与友元函数)
类模板碰到继承问题 基类如果是模板类,必须让子类告诉编译器 基类中的T到底是什么类型 如果不告诉,那么无法分配内存,编译不过 利用参数列表class Child :public Base<int ...
- c++友元函数与友元类
友元函数和友元类的需要: 类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的.非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这 ...
- public 函数_Chapter18:友元函数和友元类
这一章的问题从"如何畅通无阻的访问另一个类"开始,类的属性有private.protected.public,根据继承权限有不同的访问方式.但是类之间的关系不一定是继承,有时一个类 ...
- 【足迹C++primer】52、,转换和继承虚函数
转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding h ...
- C++中友元函数,友元类数详解
C++控制对类对象私有部分的访问,为了适应的编程问题,所以在C++中提供了特定的访问权限:友元. 友元分为3中即: 1:友元函数: 2:友元类: 3:友元成员函数. 一.友元函数 定义:有一类特殊的非 ...
- 【C++】C++类的学习(三)——运算符重载与友元函数
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...
- 友元函数的访问权限和注意事项
友元函数要在一个类体内说明,形式为: 形式 friend 类型名 友元函数名(形参表): 然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员 友元函 ...
- C++中的友元函数、static函数、常函数小结(理论篇)
友元函数 一个常规的成员函数声明描述了三件在逻辑上相互不同的事情 1. 该函数能访问类声明的私用部分 2. 该函数位于类的作用域之中 3. 该函数必须经由一个对象去激活(有一个this指针 ...
最新文章
- 从命令行运行postman脚本
- 清空oracle表数据 外键,oracle清空所有表数据
- java 的 AccessController.doPrivileged使用
- java xml格式打包,maven项目打包xml没有被打包解决办法 ,mybatis的xml打包
- 莫比乌斯带catia建模_独家教程 | 循环曲面“莫比乌斯”,康石石教你Rhino“3步”快速打造...
- thymeleaf条件表达式
- web安全day5:DNS部署与安全
- python接口测试覆盖率统计_pytest文档57-计算单元测试代码覆盖率(pytest-cov)
- (转)用Javascript获取页面元素的位置
- 魔兽怀旧服服务器怎么修改,魔兽世界怀旧服今日开服 魔兽世界怀旧服剥皮制皮玩法攻略 怀旧服服务器连不上怎么办?...
- 那些年你不能错过的之【Linux操作】
- PyTorch中的pack_padded_sequence和pad_packed_sequence
- 服务器vga转hdmi显示器不亮,手把手教你排除HDMI转VGA常见故障
- Android 无法播放此视频
- 王道计组——计算机的组成
- 北京工商专修学校计算机学院院长,北京工商大学计算机学院
- 凡人修c传(四)翻牌子(POJ - 3279 - Fliptile)(思维+dfs)
- 用WinDbg分析电脑蓝屏文件
- SVN提交错误:系统找不到指定路径
- 【证券相关】终值和现值