C++ //多态案例三 ---电脑组装
1 //多态案例三 ---电脑组装
2
3 #include <iostream>
4 #include <string>
5 using namespace std;
6
7 //抽象不同零件类
8 //抽象CPU类
9
10 class CPU
11 {
12 public:
13 //抽象的计算函数
14 virtual void calculate() = 0;
15
16
17
18
19
20 };
21 //抽象显卡类
22 class VideoCard
23 {
24 public:
25 //抽象的显示函数
26 virtual void display() = 0;
27
28
29
30
31
32 };
33
34 //抽象内存条类
35 class Memory
36 {
37 public:
38 //抽象的存储函数
39 virtual void storage() = 0;
40
41
42
43
44
45 };
46
47
48 //电脑类
49 class Computer
50 {
51 public:
52 Computer(CPU* cpu, VideoCard* vc, Memory* mem)
53 {
54 m_cpu = cpu;
55 m_mem = mem;
56 m_vc = vc;
57 }
58
59 //提供工作的函数
60 void work()
61 {
62
63 //让零件工作起来,调用接口
64 m_cpu->calculate();
65
66 m_vc->display();
67
68 m_mem->storage();
69 }
70
71 //提供析构函数 释放3个电脑零件
72 ~Computer()
73 {
74 //释放CPU零件
75 if (m_cpu != NULL)
76 {
77 delete m_cpu;
78 m_cpu = NULL;
79 }
80 //释放显卡零件
81 if (m_vc != NULL)
82 {
83 delete m_vc;
84 m_vc = NULL;
85 }
86 //释放内存零件
87 if (m_mem != NULL)
88 {
89 delete m_mem;
90 m_mem = NULL;
91 }
92
93 }
94
95 private:
96
97 CPU* m_cpu; //CPU的零件指针
98 VideoCard* m_vc; //显卡的零件指针
99 Memory* m_mem; //内存条零件指针
100
101
102 };
103 //具体厂商
104 //Intel 厂商
105
106 class IntelCPU :public CPU
107 {
108 public:
109 virtual void calculate()
110 {
111 cout << "Intel的CPU开始计算了" << endl;
112 }
113 };
114
115 class IntelVideoCard :public VideoCard
116 {
117 public:
118 virtual void display()
119 {
120 cout << "Intel的显卡开始显示了" << endl;
121 }
122 };
123
124 class IntelMemory :public Memory
125 {
126 public:
127 virtual void storage()
128 {
129 cout << "Intel的内存条开始储存了" << endl;
130 }
131 };
132
133
134 //Lenovo厂商
135 class LenovoCPU :public CPU
136 {
137 public:
138 virtual void calculate()
139 {
140 cout << "Lenovo的CPU开始计算了" << endl;
141 }
142 };
143
144 class LenovoVideoCard :public VideoCard
145 {
146 public:
147 virtual void display()
148 {
149 cout << "Lenovo的显卡开始显示了" << endl;
150 }
151 };
152
153 class LenovoMemory :public Memory
154 {
155 public:
156 virtual void storage()
157 {
158 cout << "Lenovo的内存条开始储存了" << endl;
159 }
160 };
161
162 void test01()
163 {
164 //第一台电脑的零件
165 cout << "创建第一台电脑" << endl;
166 CPU* intelCpu = new IntelCPU;
167 VideoCard* intelCard = new IntelVideoCard;
168 Memory* intelMem = new IntelMemory;
169
170 //创建第一台电脑
171 Computer* computer1 = new Computer(intelCpu,intelCard,intelMem);
172 computer1->work();
173 delete computer1;
174
175 //delete intelCpu;
176 //delete intelCard;
177 //delete intelMem;
178
179 //第二台电脑的组装
180
181 //CPU* lenovoCpu = new LenovoCPU;
182 //VideoCard* lenovoCard = new LenovoVideoCard;
183 //Memory* lenovoMem = new LenovoMemory;
184
185
186 //Computer* computer2 = new Computer(lenovoCpu, lenovoCard, lenovoMem);
187 //computer2->work();
188 //delete computer2;
189 cout << "*************************************"<<endl;
190 cout << "创建第二台电脑" << endl;
191
192 //第二台电脑的组装
193 Computer* computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);
194 computer2->work();
195 delete computer2;
196
197
198 cout << "*************************************" << endl;
199 cout << "创建第三台电脑" << endl;
200
201 //第二台电脑的组装
202 Computer* computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);
203 computer3->work();
204 delete computer3;
205
206
207
208
209 }
210
211 int main()
212 {
213
214 test01();
215
216
217 system("pause");
218
219 return 0;
220
221 }
C++ //多态案例三 ---电脑组装的更多相关文章
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Java多态案例分析
一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1 ...
- 理解java的三大特性之多态(三)
摘自:http://cmsblogs.com/?p=52 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已 ...
- WPF案例 (三) 模拟QQ“快速换装"界面
原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...
- 案例学python——案例三:豆瓣电影信息入库
闲扯皮 昨晚给高中的妹妹微信讲题,函数题,小姑娘都十二点了还迷迷糊糊.今天凌晨三点多,被连续的警报声给惊醒了,以为上海拉了防空警报,难不成地震,空袭?难道是楼下那个车主车子被堵了,长按喇叭?开窗看看, ...
- 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)
案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...
- 七、Dockerfile案例三(Mysql安装)
七.Dockerfile案例三(Mysql安装) *特别提醒:新版的mysql:5.7数据库下的user表中已经没有Password字段了(5.5的user表还有) 一.查看docker hub上的版 ...
- 【JavaScript】案例三:使用JS完成页面定时弹出广告——事件(onload)
事件(onload) *注意点: 变量加var局部变量,不加var全局变量 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. 返回值:返回 ...
随机推荐
- Android开发万能Utils(工具大全)
AndroidUtils Android开发不得不收藏的Utils About AndroidUtilCode 是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的 Demo ...
- 基于Istio构建微服务安全加固平台的探索
简介 An open platform to connect, secure, control and observe services. Istio 是一个由谷歌.IBM 与Lyft共同开发的开源项 ...
- 46、django工程(view)
46.1.django view 视图函数说明: 1.http请求中产生两个核心对象: (1)http请求:HttpRequest对象. (2)http响应:HttpResponse对象. 2.vie ...
- layui 列合并相同内容
table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ...
- AcWing 1250. 格子游戏
#include<bits/stdc++.h> using namespace std; int n,m; int fa[1000000]; int found(int x) { if(f ...
- CentOS-Docker安装PostgreSQL(单点)
下载镜像 $ docker pull postgres 创建目录 $ mkdir -p /usr/postgres/data $ chmod -R 755 /usr/postgres/data 运行镜 ...
- python opencv处理图片
1.图像读入:cv2.imread() 使用函数cv2.imread(filepath,flags) 读入图像.第二个参数是要告诉函数应该如何读取这幅图片. cv2.IMREAD_COLOR:默认参数 ...
- XCTF(MISC) 坚持60s
题目描述:菜狗发现最近菜猫不爱理他,反而迷上了菜鸡 下载附件,发现是一个游戏,同时要玩到60s才能得到flag(可恶,完全玩不到60s,被疯狂嘲讽) ------------------------- ...
- IDA PRO:庆祝成立创新 30 周年
今天,IDA 已经三十岁了.为了纪念周年纪念,我们将描述史诗旅程的开始和主要里程碑. 背景 在 1990 年代初期,DOS 是最流行的 PC 操作系统,主要是 8086,偶尔有 80286(80386 ...
- Leetcode No.26 Remove Duplicates from Sorted Array(c++实现)
1. 题目 1.1 英文题目 Given an integer array nums sorted in non-decreasing order, remove the duplicates in- ...