HM142 三台电脑组装落地

HM142 三台电脑组装落地

HM142 三台电脑组装落地

来源: 第 142 集 类和对象-多态-案例3-电脑组装具体实现

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

上一问只把零件抽象清楚。现在要把电脑真正组装出来,并处理堆上零件的释放。

零件层仍然是三个抽象类,接口都是纯虚函数、父类不写实现:CPU::calculate()VideoCard::display()Memory::storage()。Intel、Lenovo 两个厂商各自重写三种零件,输出与上一问相同的三句工作提示。再增加厂商时只需往后追加类,不必改已经写好的抽象层和电脑类。

电脑类 Computer 用三个**父类指针**保存零件(这就是多态:调用接口时按实际子对象走不同实现),并做到:

  1. 构造函数接收三个零件指针并保存。
  2. work() 依次让 CPU 计算、显卡显示、内存存储。
  3. 析构函数里释放三块零件:先判断指针不是 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、显卡、内存品牌,只可能是 IntelLenovo

输出格式

对第 \(i\) 台电脑:

  1. 一行 \(i\) 台电脑开始工作
  2. 三行零件工作句(全角 ),规则与零件重写一致
  3. 三行释放提示,顺序固定为:
    • 释放CPU零件
    • 释放显卡零件
    • 释放内存零件
  4. 若 \(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
通过率
?
上传者