HM142 三台电脑组装落地
HM142 三台电脑组装落地
来源: 第 142 集 类和对象-多态-案例3-电脑组装具体实现
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
上一问只把零件抽象清楚。现在要把电脑真正组装出来,并处理堆上零件的释放。
零件层仍然是三个抽象类,接口都是纯虚函数、父类不写实现:CPU::calculate()、VideoCard::display()、Memory::storage()。Intel、Lenovo 两个厂商各自重写三种零件,输出与上一问相同的三句工作提示。再增加厂商时只需往后追加类,不必改已经写好的抽象层和电脑类。
电脑类 Computer 用三个**父类指针**保存零件(这就是多态:调用接口时按实际子对象走不同实现),并做到:
- 构造函数接收三个零件指针并保存。
work()依次让 CPU 计算、显卡显示、内存存储。- 析构函数里释放三块零件:先判断指针不是
NULL,再delete,再置成NULL。零件是堆上new出来的,只delete电脑对象不够,必须在电脑析构里把零件一并释放。
测试时电脑对象也放在堆上:Computer* computer1 = new Computer(...); 调用 work() 后 delete computer1,这样才会走进电脑析构、释放零件。零件既可以先 new 再传入,也可以在构造实参里直接 new。
读入若干台电脑。对第 \(i\) 台(从 1 编号),先输出一行工作提示,再 work() 三行,再因析构输出三行释放提示,最后若后面还有电脑,输出一行分隔线。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 100\))。
接下来 \(n\) 行,每行三个单词,依次是 CPU、显卡、内存品牌,只可能是 Intel 或 Lenovo。
输出格式
对第 \(i\) 台电脑:
- 一行
第\(i\)台电脑开始工作 - 三行零件工作句(全角
!),规则与零件重写一致 - 三行释放提示,顺序固定为:
释放CPU零件释放显卡零件释放内存零件
- 若 \(i < n\),再输出一行
--------------------
行末换行。工作句必须由零件虚函数打出,释放句必须由 Computer 析构打出。
样例
输入 #1
3
Intel Intel Intel
Lenovo Lenovo Lenovo
Lenovo Intel Lenovo
输出 #1
第1台电脑开始工作
Intel的CPU开始计算了!
Intel的显卡开始显示了!
Intel的内存条开始存储了!
释放CPU零件
释放显卡零件
释放内存零件
--------------------
第2台电脑开始工作
Lenovo的CPU开始计算了!
Lenovo的显卡开始显示了!
Lenovo的内存条开始存储了!
释放CPU零件
释放显卡零件
释放内存零件
--------------------
第3台电脑开始工作
Lenovo的CPU开始计算了!
Intel的显卡开始显示了!
Lenovo的内存条开始存储了!
释放CPU零件
释放显卡零件
释放内存零件
输入 #2
1
Intel Lenovo Intel
输出 #2
第1台电脑开始工作
Intel的CPU开始计算了!
Lenovo的显卡开始显示了!
Intel的内存条开始存储了!
释放CPU零件
释放显卡零件
释放内存零件
说明
- 样例 #1 对应课堂上的三台:全 Intel、全 Lenovo、联想 CPU + 英特尔显卡 + 联想内存。
- 电脑类只认三块抽象指针,换搭配或加厂商都不必改
work。 - 析构里要判断非空、释放、置空,避免只删电脑却留下零件。
信息
- ID
- 1141
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者