C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高
1 //多态案例 -计算器类(普通写法 和 多态写法)
2
3 #include <iostream>
4 #include <string>
5 using namespace std;
6
7 //普通实现
8 class Calualtor
9 {
10 public:
11
12 int getResult(string oper)
13 {
14 if (oper == "+")
15 {
16 return m_Num1 + m_Num2;
17 }
18 else if (oper == "-")
19 {
20 return m_Num1 - m_Num2;
21 }
22 else if (oper == "*")
23 {
24 return m_Num1 * m_Num2;
25 }
26 //如果想扩展新的功能,需要修改源码
27 //在真实的开发中 提倡 开闭原则
28 //开闭原则:对扩展进行开放 对修改进行关闭
29 }
30
31
32 int m_Num1; //操作数1
33 int m_Num2; //操作数2
34 };
35
36 void test01()
37 {
38 //创建计算器的对象
39 Calualtor c;
40 c.m_Num1 = 10;
41 c.m_Num2 = 10;
42
43 cout << c.m_Num1 << "+" << c.m_Num2 << "=" << c.getResult("+") << endl;
44
45 cout << c.m_Num1 << "-" << c.m_Num2 << "=" << c.getResult("-") << endl;
46
47 cout << c.m_Num1 << "*" << c.m_Num2 << "=" << c.getResult("*") << endl;
48 }
49
50
51 //利用多态实现计算器
52 //多态好处:
53 //1.组织结构清晰
54 //2.可读性强
55 //3.对于前期和后期扩展以及维护性高
56
57
58 //实现计算器的抽象类
59 class AbstractCalculator
60 {
61 public:
62
63 virtual int getResult()
64 {
65 return 0;
66 }
67
68 int m_Num1;
69 int m_Num2;
70 };
71
72 //加法计算器
73 class AddCalculator : public AbstractCalculator
74 {
75
76 public:
77 virtual int getResult()
78 {
79 return m_Num1 + m_Num2;
80 }
81 };
82
83 //减法计算器
84 class SubCalculator : public AbstractCalculator
85 {
86
87 public:
88 virtual int getResult()
89 {
90 return m_Num1 - m_Num2;
91 }
92 };
93 //乘法计算器
94 class MulCalculator : public AbstractCalculator
95 {
96
97 public:
98 virtual int getResult()
99 {
100 return m_Num1 * m_Num2;
101 }
102 };
103
104
105 void test02()
106 {
107 //多态使用条件
108
109 //父类指针或者引用指向子类对象
110 //加法运算
111 AbstractCalculator* abc = new AddCalculator;
112 abc->m_Num1 = 10;
113 abc->m_Num2 = 20;
114 cout << "多态计算器" << endl;
115 cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl;
116
117 //用完后销毁
118 delete abc;
119
120 //减法运算
121 abc = new SubCalculator;
122 abc->m_Num1 = 100;
123 abc->m_Num2 = 101;
124 cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl;
125 delete abc;
126
127 abc = new MulCalculator;
128 abc->m_Num1 = 12;
129 abc->m_Num2 = 10;
130 cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;
131
132 delete abc;
133 }
134
135 int main()
136 {
137
138 test01();
139
140 test02();
141
142 system("pause");
143
144 return 0;
145
146 }

C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高的更多相关文章
- C++ //多态案例三 ---电脑组装
1 //多态案例三 ---电脑组装 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 ...
- Java多态案例分析
一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1 ...
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
- 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类
5.8多态 上面我们了解了向上转型,即一个对象变量可以引用本类及子类的对象实例,这种现象称为多态(polymorphism).多态究竟有什么用呢?我们先学习一个知识点. 5.8.1方法重写 前面我们学 ...
- C++ 多态 案例(//多态案例----制作饮品 //描述:煮水 冲泡 倒入杯中 加入辅料)
1 //多态案例----制作饮品 2 //描述:煮水 冲泡 倒入杯中 加入辅料 3 4 #include <iostream> 5 #include <string> 6 us ...
- C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态
1 //多态 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 3 //动态多态:派生类和虚函数实现运行时多态 4 5 //静态多态和动态多态的区别 6 //静态多态的函数地址早 ...
- Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...
- 【C】——C利用回调函数实现多态
案例: 功能:可以根据用户输入的命令完成相应的功能: 例如: 用户输入 hello 完成输出 hello的功能. 用户输入 hi 完成输出 hi 的功能. 一般的写法可能会写两个函数 ...
- Python开发——利用正则表达式实现计算器算法
Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...
随机推荐
- k8s 1.12 环境部署及学习笔记
1.K8S概述 1.Kubernetes是什么 2.Kubernetes特性 3.Kubernetes集群架构与组件 4.Kubernetes核心概念 1.1 Kubernetes是什么 • Kube ...
- SpringCloud Alibaba实战(11:引入服务网关Gateway)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 在前面的章节中,我们已经完成了服务间的调用.统一配置等等,在这 ...
- Linux中mail的用法
简介:mail命令是命令行的电子邮件发送和接收工具.操作的界面不像elm或pine那么容易使用,但功能非常完整Red Hat上sendmail服务一般是自动启动的.可以通过下面的命令查看sendmai ...
- 跟我一起学 Go 系列:gRPC 拦截器
Go gRPC 学习系列: 跟我一起学Go系列:gRPC 入门必备 第一篇内容我们已经基本了解到 gRPC 如何使用 .对应的三种流模式.现在已经可以让服务端和客户端互相发送消息.本篇仍然讲解功能性的 ...
- 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)
15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...
- 7.7、深入解析openstak工作流程
1.openstack的使用: (1)使用openstack创建的用户默认是default域,角色是user; (2)域-->角色-->用户-->项目 (3)配额在管理员登录后再项目 ...
- 9.5、zabbix高级操作(2)
4.zabbix的分布式监控: 使用zabbix-proxy主动方式(被动也可),使用zabbix-agent的主动方式(被动也可): Zabbix Server <- Zabbix Proxy ...
- SpringBoot:springboot整合eureka报错 Unable to start embedded Tomcat
报错信息: org.springframework.context.ApplicationContextException: Unable to start web server; nested ex ...
- xcopy应用于版本合并
脚本 set src=C:\Users\cl\projectset dist=C:\Users\cl\projectxcopy %src% %dist% /y /e /exclude:exclude. ...
- SpringMvc实现批量删除,使用post传值一直报404错误
Ajax结合SpringMVC实现批量删除信息,在前台使用post向后台传递要删除的id的集合额时候,一直报404错误, 前台post传值的源码如下: 了解一下: (1)第二行的rows为前面得到的一 ...