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. Android开发万能Utils(工具大全)

    AndroidUtils Android开发不得不收藏的Utils About AndroidUtilCode  是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的 Demo ...

  2. 基于Istio构建微服务安全加固平台的探索

    简介 An open platform to connect, secure, control and observe services. Istio 是一个由谷歌.IBM 与Lyft共同开发的开源项 ...

  3. 46、django工程(view)

    46.1.django view 视图函数说明: 1.http请求中产生两个核心对象: (1)http请求:HttpRequest对象. (2)http响应:HttpResponse对象. 2.vie ...

  4. layui 列合并相同内容

    table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ...

  5. AcWing 1250. 格子游戏

    #include<bits/stdc++.h> using namespace std; int n,m; int fa[1000000]; int found(int x) { if(f ...

  6. CentOS-Docker安装PostgreSQL(单点)

    下载镜像 $ docker pull postgres 创建目录 $ mkdir -p /usr/postgres/data $ chmod -R 755 /usr/postgres/data 运行镜 ...

  7. python opencv处理图片

    1.图像读入:cv2.imread() 使用函数cv2.imread(filepath,flags) 读入图像.第二个参数是要告诉函数应该如何读取这幅图片. cv2.IMREAD_COLOR:默认参数 ...

  8. XCTF(MISC) 坚持60s

    题目描述:菜狗发现最近菜猫不爱理他,反而迷上了菜鸡 下载附件,发现是一个游戏,同时要玩到60s才能得到flag(可恶,完全玩不到60s,被疯狂嘲讽) ------------------------- ...

  9. IDA PRO:庆祝成立创新 30 周年

    今天,IDA 已经三十岁了.为了纪念周年纪念,我们将描述史诗旅程的开始和主要里程碑. 背景 在 1990 年代初期,DOS 是最流行的 PC 操作系统,主要是 8086,偶尔有 80286(80386 ...

  10. 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- ...