【id:301】【20分】D. 拯救小明(多继承+友元)

题目描述

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

要求如下:

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的时间。

输入

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

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

输出

时间最靠前的作业。

灵感来源

我曾经在做这道题目是也是为日期的比较犯不着头脑&#x

### C++多继承友元的使用方法 在 C++ 编程语言中,多继承是一种强大的机制,允许一个类从多个基类派生。这种设计模式能够使程序更加灵活和模块化[^4]。然而,在实现过程中需要注意一些细节,比如构造顺序以及成员变量的作用域等问题。 #### 多继承基础 多继承可以通过以下语法形式完成: ```cpp class DerivedClass : AccessSpecifier1 BaseClass1, AccessSpecifier2 BaseClass2 { // 类体定义 }; ``` 这里 `AccessSpecifier` 表示访问控制修饰符(public、protected 或 private),决定了子类对外暴露哪些部来自父类的内容[^4]。 #### 友元概念补充说明 友元打破了封装原则,给予特定实体权限去直接操作某个类内部的数据结构或者行为逻辑。它可以是一个单独函数或者是整个其他类别[^2]。一旦某项被标记成friend,则无论其原本属于何种保护级别都将变为完全开放状态供指定方调用。 #### 实际案例析——救助小明 假设存在这样一个情景:我们需要构建两个独立但又相互关联的角色模型,“医生”负责诊断病情并开具处方;“药剂师”则依据这些信息配制药物给病人服用。“小明”作为患者需要得到他们的共同帮助才能恢复健康状况。此时就可以利用到C++里的多重继承加上适当设置好的friends关系来解决问题: ##### 完整代码展示 ```cpp #include <iostream> using namespace std; // 基础疾病描述类 class DiseaseInfo { private: string diseaseName; public: DiseaseInfo(string name):diseaseName(name){} friend class Doctor; // 让Doctor成为DiseaseInfo的好友 }; // 医生角色 - 能够获取病人的病症详情 class Doctor{ public: void diagnose(DiseaseInfo& info){ cout << "Doctor diagnosed the patient with "<< ((DiseaseInfo*)&info)->diseaseName<< "."<<endl ; } }; // 配药指南类 class MedicineGuide{ private : double dosage; public: MedicineGuide(double d):dosage(d){} friend class Pharmacist;//Pharmacist 成为了MedicineGuide 的好友 }; // 药剂师角色 - 根据指导调整药品剂量 class Pharmacist{ public: void prepare(MedicineGuide& guide){ cout<<"The pharmacist prepared medicine according to dose of "<<((MedicineGuide*)&guide)->dosage<<" mg."<<endl; } }; // 综合治疗方案制定者 - 同时具备医生和药师的能力 class TreatmentPlanMaker : public Doctor , public Pharmacist {}; int main(){ DiseaseInfo illness("Fever"); MedicineGuide prescription(50); TreatmentPlanMaker helper; helper.diagnose(illness); // 使用继承自Doctor的功能 helper.prepare(prescription); // 使用继承自Pharmacist的功能 return 0; } ``` 在这个例子当中,我们创建了一个名为TreatmentPlanMaker的新类型,它既拥有Doctor也拥有Pharmacist的所有功能。通过合理运用friend关键字赋予不同组件间必要的交互能力,最终实现了对于像小明这样的患者的全面照顾过程模拟演示[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值