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++ //多态案例三 ---电脑组装的更多相关文章

  1. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  2. Java多态案例分析

    一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1 ...

  3. 理解java的三大特性之多态(三)

    摘自:http://cmsblogs.com/?p=52 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已 ...

  4. WPF案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

  5. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  6. 案例学python——案例三:豆瓣电影信息入库

    闲扯皮 昨晚给高中的妹妹微信讲题,函数题,小姑娘都十二点了还迷迷糊糊.今天凌晨三点多,被连续的警报声给惊醒了,以为上海拉了防空警报,难不成地震,空袭?难道是楼下那个车主车子被堵了,长按喇叭?开窗看看, ...

  7. 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

    案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...

  8. 七、Dockerfile案例三(Mysql安装)

    七.Dockerfile案例三(Mysql安装) *特别提醒:新版的mysql:5.7数据库下的user表中已经没有Password字段了(5.5的user表还有) 一.查看docker hub上的版 ...

  9. 【JavaScript】案例三:使用JS完成页面定时弹出广告——事件(onload)

     事件(onload) *注意点: 变量加var局部变量,不加var全局变量 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. 返回值:返回 ...

随机推荐

  1. 12、如何删除windows服务

    12.1.步骤一: 同时按住"windows"徽标键和"r"键,在弹出的"运行"框中输入"services.msc", ...

  2. 22、部署drdb

    22.1.heartbeat部署规划: 本文的实验环境是虚拟机设备: 名称 接口 ip 用途 master-db(主) eth0 10.0.0.16/24 用于服务器之间的数据同步(直连) eth1 ...

  3. 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法

    "为什么这个功能用不了?" 程序员:"清一下缓存" 上篇洞悉系列文章给大家详细介绍了MySQL的存储内幕:洞悉MySQL底层架构:游走在缓冲与磁盘之间.既然聊过 ...

  4. POJ 1410 判断线段与矩形交点或在矩形内

    这个题目要注意的是:给出的矩形坐标不一定是按照左上,右下这个顺序的 #include <iostream> #include <cstdio> #include <cst ...

  5. 配置tomcat虚拟主机

    实例说明 本实例介绍如何配置tomcat的虚拟主机. 关键技术 关于server.xml中host这个元素,只有在设置虚拟主机是才会修改.虚拟主机是一种在一个Web服务器上服务多个域名的机制,对这个域 ...

  6. JS中的单例模式及单例模式原型类的实现

    单例模式 单例模式的定义: 保证一个类只有一个实例,并提供一个访问它的全局访问点 通过一个简单的例子来了解单例模式的作用: class Div { constructor() { return doc ...

  7. PHP解决并发问题的几种实现(转)

      对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 ...

  8. linux学习之路第七天(压缩和解压类指令详解)

    压缩和解压类 1.gzip/gunzip 指令 gzip 指令用于压缩文件, gunzip用于解压的 基本语法 gzip 文件 (功能描述:压缩文件,指令将文件压缩成*.gz文件) gunzip 文件 ...

  9. 打开设置windows10内置linux功能-启用linux子系统

    第一步设置开发者模式 步骤:windows+s打开娜娜,输入设置,并点击. 点击更新与安全 点击开发者选项,选择开发者模型,弹出的对话框选确定之后等待安装完毕. 第二步:安装linux 点击确定后等待 ...

  10. ESP32的Flash加密知识

    一.Flash 加密功能用于加密与 ESP32-S2 搭载使用的 SPI Flash 中的内容.启用 Flash 加密功能后,物理读取 SPI Flash 便无法恢复大部分 Flash 内容.通过明文 ...