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() 被调用或窗口被关闭. 返回值:返回 ...
随机推荐
- 【LeetCode每日一题 Day 5】5. 最长回文子串
大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...
- 12、如何删除windows服务
12.1.步骤一: 同时按住"windows"徽标键和"r"键,在弹出的"运行"框中输入"services.msc", ...
- hive学习笔记之十一:UDTF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【转载】CentOS-yum安装Nginx
查看系统版本 $ cat /etc/redhat-release Nginx 不在默认的 yum 源中,使用官网的 yum 源 $ rpm -ivh http://nginx.org/packages ...
- CentOS-Docker搭建Kafka(单点,含:zookeeper、kafka-manager)
Docker搭建Kafka(单点,含:zookeeper.kafka-manager) 下载相关容器 $ docker pull wurstmeister/zookeeper $ docker pul ...
- 1.3.2、通过Cookie匹配
server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...
- 数据库表的自增ID createDate和updateDate 用JPA注解代替触发器实现
对于数据库表的自增ID , createDate和updateDate 等字段,用JPA注解代替触发器实现,效率会高很多. 由于这些属性很多entity都有 可以写成两个基本entity :BaseE ...
- Acunetix引入了Docker支持,扫描统计信息以及将漏洞发送到AWS WAF的功能
已针对Windows,Linux和macOS发布了新的Acunetix更新:14.2.210503151. 此Acunetix更新引入了Docker支持,针对每次扫描显示的新"扫描统计信息& ...
- ADC电阻分压采集相关知识
1.电池串联可以增加电压,电池并联可以增加电流,都是为了增加电功率.但是电池不宜并联,即使是相同规格的电池,如果消耗不同,电势就会不同,会造成电池之间的放电现象. 2.电阻的作用: 限流:为使通过用电 ...
- C语言:统计字符个数及种类
#include <stdio.h> int main(){ char c; //用户输入的字符 int shu=0;//字符总数 int letters=0, // 字母数目 space ...