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.对于前期和后期扩展以及维护性高的更多相关文章

  1. C++ //多态案例三 ---电脑组装

    1 //多态案例三 ---电脑组装 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 ...

  2. Java多态案例分析

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

  3. Java 面向对象概述原理: 多态、Object类,转型(8)

    Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...

  4. 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类

    5.8多态 上面我们了解了向上转型,即一个对象变量可以引用本类及子类的对象实例,这种现象称为多态(polymorphism).多态究竟有什么用呢?我们先学习一个知识点. 5.8.1方法重写 前面我们学 ...

  5. C++ 多态 案例(//多态案例----制作饮品 //描述:煮水 冲泡 倒入杯中 加入辅料)

    1 //多态案例----制作饮品 2 //描述:煮水 冲泡 倒入杯中 加入辅料 3 4 #include <iostream> 5 #include <string> 6 us ...

  6. C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态

    1 //多态 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 3 //动态多态:派生类和虚函数实现运行时多态 4 5 //静态多态和动态多态的区别 6 //静态多态的函数地址早 ...

  7. Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。

    返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...

  8. 【C】——C利用回调函数实现多态

    案例: 功能:可以根据用户输入的命令完成相应的功能: 例如: 用户输入  hello   完成输出 hello的功能.    用户输入  hi   完成输出 hi 的功能. 一般的写法可能会写两个函数 ...

  9. Python开发——利用正则表达式实现计算器算法

    Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...

随机推荐

  1. Unity获取系统时间

    示例如下: Debug.Log(System.DateTime.Now); // 当前本地时间 (年月日时分秒) -- 10/4/2018 9:38:19 PM Debug.Log(System.Da ...

  2. 12.10、elk实用案例

    1.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 2.安装filebeat: filebeat不 ...

  3. actviti7撤回操作

    @Override @Transactional(rollbackFor = Exception.class) public int callBack(String processId) { //通过 ...

  4. Game游戏分析

    1.鲁棒图分析 2.系统上下文及交互方式 3.用例 4.逻辑拓扑图 5.物理拓扑图 6.时序图 7.状态图 8.物理数据模型 9.类图 10.技术选型 11.框架搭建 12.工具及通用服务 13.架构 ...

  5. 关键字abstract和static总结

    1.  abstract:意为抽象,在Java中可以修饰方法或者类 (1)修饰方法,这个方法是抽象方法,无方法体,这个类一定是抽象类,这个类的子类必须实现这个抽象方法: (2)修饰类,这个类一定是抽象 ...

  6. 「HEOI2016/TJOI2016」排序

    「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字. 题解 ...

  7. 【BZOJ 4771】七彩树

    一直TLE的原因竟然是数组开太大了导致\(memset\)清空耗时超限,亏我还调了1天啊(T^T) 题目大意 给定一颗树,每个节点都有一个颜色,要求多次询问某个节点\(x\)的子树中深度不超过\(d\ ...

  8. Pandas高级教程之:window操作

    目录 简介 滚动窗口 Center window Weighted window 加权窗口 扩展窗口 指数加权窗口 简介 在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window ...

  9. Antilibrary能拯救稍后不读吗

    从「稍后再读」到「再也不读」 上学时,我有一套自认为很高效的资料搜集工作流.大致流程是浏览到感兴趣或可能有用的信息时,粗略扫过一眼后即用 Pocket 将其保存为稍后再读,随后借助 IFTTT 的某个 ...

  10. 备战-Java 并发

    备战-Java 并发 谁念西风独自凉,萧萧黄叶闭疏窗 简介:备战-Java 并发. 一.线程的使用 有三种使用线程的方法: 实现 Runnable 接口: 实现 Callable 接口: 继承 Thr ...