
C++小实验--组装电脑
发布日期:2021-05-08 04:53:59
浏览次数:20
分类:原创文章
本文共 6155 字,大约阅读时间需要 20 分钟。
学了这么久的C++,一直做题,难道不来点实际的搞搞?
( •̀ ω •́ )✧,现在一个万众瞩目的任务来了:
学计算机的不会修电脑,那就组装电脑试试:ヾ(≧▽≦*)o
(ps:画电脑充饥)
任务要求: 自己去买CPU(中央处理器),HardDisk(硬盘),MainBoard(主板) 客户是不用找的,一辈子都不会去找的。(因为我们已经准备好了DELL和IBM[]~( ̄▽ ̄)~*) 言归正传,具体要求如下:o(* ̄︶ ̄*)o 硬件方面: 设计一个HardWare类,包含hardware的品牌名字(弄一个getbrand()),并由HardWare类派生出CPU,HardDisk,MainBoard类。 下面的每一个硬件都要弄几个个getinfo(),work(检验是否正常工作)这种的函数。 其中CPU类+一个frequency数据,MainBoard+type版型,HardDisk+store储量 最后由三种硬件组装成PC。 他来了,他来了,他带着需求走来了……(~ ̄▽ ̄)~ 生产厂家类 电脑生产一条龙,可以生产所有的硬件和组装(具体看下面的例子) 由这个类派生出DELL和IBM 我就是从这里跳下去,也不给你们定制电脑((〃 ̄︶ ̄)人( ̄︶ ̄〃)真香) 客户类(具体看下面的例子)
sample input and ouput
Intel 4.5Seagate 500ASUS ATXAMD 3.8Sumsang 1000ASUS MINI-ITX
sample ouput
Building Dell ComputerIntel CPU Work with 4.5GHzSeagate HardDisk Work with 500GASUS MainBoard Work with ATXPC WorkBuilding IBM ComputerAMD CPU Work with 3.8GHzSumsang HardDisk Work with 1000GASUS MainBoard Work with MINI-ITXPC Work
下面是我自己写的一个(~ ̄▽ ̄)~
HardWare类
class HardWare{ private: string brand = ""; public: HardWare(string bra = "") : brand(bra) { } virtual ~HardWare() { } virtual void Set(HardWare *obj); //除非是纯基类,否则虚函数需要定义 virtual void work() { } string getBrand() { return brand; }};void HardWare::Set(HardWare *obj){ brand = obj->brand;}
CPU,MainBord,HardDisk类
class CPU : public HardWare{ private: double frequency = 0.0; public: CPU(string b = "", double f = 0.0) : HardWare(b), frequency(f) { } virtual ~CPU() { } virtual void Set(CPU *obj); void work(); double getFrequency() { return frequency; }};void CPU::Set(CPU *obj){ frequency = obj->frequency; HardWare::Set(obj);}void CPU::work(){ cout << getBrand() << " CPU Work with " << frequency << "GHz\n";}class MainBoard : public HardWare{ private: string type = ""; public: MainBoard(string b = "", string t = "") : HardWare(b), type(t) { } virtual ~MainBoard() { } virtual void Set(MainBoard *obj); void work(); string getType() { return type; }};void MainBoard::Set(MainBoard *obj){ type = obj->type; HardWare::Set(obj);}void MainBoard::work(){ cout << getBrand() << " MainBoard Work with " << type << "\n";}class HardDisk : public HardWare{ private: int store = 0; public: HardDisk(string b = "", int s = 0) : HardWare(b), store(s) { } virtual ~HardDisk() { } virtual void Set(HardDisk *obj); void work(); int getStore() { return store; }};void HardDisk::Set(HardDisk *obj){ store = obj->store; HardWare::Set(obj);}void HardDisk::work(){ cout << getBrand() << " HardDisk Work with " << store << "G\n";}
PC类
//用复合的关系更好class PC{ private: vector<HardWare *> computer; public: void AddToPC(HardWare *obj); void Work();};void PC::AddToPC(HardWare *obj){ computer.push_back(obj);}void PC::Work(){ for (int i = 0; i < computer.size(); i++) computer[i]->work(); cout << "PC Work\n";}
生产厂家
//纯虚类class Builder { public: virtual void ProduceCPU() = 0; virtual void ProduceHardDisk() = 0; virtual void ProduceMainBoard() = 0; virtual void ProducePC() = 0; virtual PC *GetPC() = 0;};class DellBuilder : public Builder{ public: virtual void ProduceCPU(); //根据输入创建一个CPU对象,然后加入到机箱中。下同 virtual void ProduceHardDisk(); virtual void ProduceMainBoard(); virtual void ProducePC(); //创建一个机箱对象 PC *GetPC(); //返回一个机箱对象 private: PC *m_PC; //生产的机箱};void DellBuilder::ProduceCPU(){ string brand; double frequency; cin >> brand >> frequency; cin.get(); //论烦人的换行符 HardWare *wcpu = new CPU(brand, frequency); m_PC->AddToPC(wcpu); //这个指针在后面是会使用的,所以不能删,删了就变成了野指针 //new出来的东西删与不删,什么时候删是c++中的一个很恶心的问题 //delete wcpu;}void DellBuilder::ProduceHardDisk(){ string brand; unsigned int store; cin >> brand >> store; cin.get(); HardWare *wdisk = new HardDisk(brand, store); m_PC->AddToPC(wdisk);}void DellBuilder::ProduceMainBoard(){ string brand, type; cin >> brand >> type; cin.get(); HardWare *wboard = new MainBoard(brand, type); m_PC->AddToPC(wboard);}void DellBuilder::ProducePC(){ m_PC = new PC();}PC *DellBuilder::GetPC(){ return m_PC;}class IBMBuilder : public Builder{ public: virtual void ProduceCPU(); //根据输入创建一个CPU对象,然后加入到机箱中。下同 virtual void ProduceHardDisk(); virtual void ProduceMainBoard(); virtual void ProducePC(); //创建一个机箱对象 PC *GetPC(); //返回一个机箱对象 private: PC *m_PC; //生产的机箱};void IBMBuilder::ProduceCPU(){ string brand; double frequency; cin >> brand >> frequency; cin.get(); HardWare *wcpu = new CPU(brand, frequency); m_PC->AddToPC(wcpu);}void IBMBuilder::ProduceHardDisk(){ string brand; unsigned int store; cin >> brand >> store; cin.get(); HardWare *wdisk = new HardDisk(brand, store); m_PC->AddToPC(wdisk);}void IBMBuilder::ProduceMainBoard(){ string brand, type; cin >> brand >> type; cin.get(); HardWare *wboard = new MainBoard(brand, type); m_PC->AddToPC(wboard);}void IBMBuilder::ProducePC(){ m_PC = new PC();}PC *IBMBuilder::GetPC(){ return m_PC;}
客户类
class Client{ public: Client() { } Client(Builder *pBuilder) : m_pBuilder(pBuilder){ } PC *CreatePC(); private: Builder *m_pBuilder;};PC *Client::CreatePC(){ m_pBuilder->ProducePC(); m_pBuilder->ProduceCPU(); m_pBuilder->ProduceHardDisk(); m_pBuilder->ProduceMainBoard(); return (m_pBuilder->GetPC());}
main函数
int main(){ cout << "\nBuilding Dell Computer\n"; Builder *pDell = new DellBuilder(); //创建Dell厂商 Client *pClient1 = new Client(pDell); //创建一个用户,并使用dell厂商 PC *pPC1 = pClient1->CreatePC(); // 生产一台电脑 pPC1->Work(); //显示电脑的工作状态 cout << "\nBuilding IBM Computer\n"; IBMBuilder *pIBM = new IBMBuilder(); Client *pClient2 = new Client(pIBM); PC *pPC2 = pClient2->CreatePC(); pPC2->Work(); system("pause"); return 0;}
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月25日 15时22分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
2021-05-07
LeetCode - 5. 最长回文子串——字符串、动态规划
2021-05-07
全局锁和表锁 :给表加个字段怎么有这么多阻碍?
2021-05-07
二分查找与插入排序的结合使用
2021-05-07
892 三维形体的表面积(分析)
2021-05-07
279 完全平方数(bfs)
2021-05-07
875 爱吃香蕉的珂珂(二分查找)
2021-05-07
第十一届蓝桥杯python组第二场省赛-数字三角形
2021-05-07
BST中某一层的所有节点(宽度优先搜索)
2021-05-07
广度优先搜索
2021-05-07
Dijkstra算法的总结
2021-05-07
C语言的运算符和表达式
2021-05-07
Vue实现选项卡功能
2021-05-07
uni-app请求头中携带token
2021-05-07
vue中接收后台的图片验证码并显示
2021-05-07
Vue入门学习笔记(1)
2021-05-07
趣谈win10常用快捷键
2021-05-07
数学建模更新12(数学线性规划模型1)
2021-05-07
Android,SharedPreferences的使用
2021-05-07