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. 98、配置ftp服务器(vsftpd)

    98.1.安装vsftpd: 1.安装: [root@m01 ~]# yum install -y vsftpd #安装vsftpd [root@m01 ~]# vsftpd -v #查看ftp的版本 ...

  2. 17、lnmp_php编译安装

    17.1.FastCGI介绍: 1.什么是CGI: CGI的全称为"通用网关接口",为http服务器与其他机器上的程序服务通信交流的一种工具,CGI程序 必须运行在网络服务器上:传 ...

  3. Flex中利用事件机制进行主程序与子窗体间参数传递

    在开发具有子窗体,或者itemrenderer的应用时,常常涉及到子窗体向父窗体传递参数或者从itemrenderer内的控件向外部的主程序传递参数的需求.这些都可以通过事件机制这一统一方法加以解决. ...

  4. Basic remains java入门题

    Basic remains input:   b p m    读入p进制的p,m,   求p%m   ,以b进制输出 1 import java.util.*; 2 import java.math ...

  5. 面试题三:MySQL

    MySQL有哪些存储引擎? MyISAM.InnoDB.CSV.Memory等 MyISAM和InnoDB比较: InnoDB MyISAM 事务 支持 不支持 存储限制 64TB 无 锁粒度 行锁 ...

  6. 12 shell case in语句

    Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. if else 语句与ca ...

  7. 架构之:REST和RESTful

    目录 简介 REST REST和RESTful API REST架构的基本原则 Uniform interface统一的接口 Client–server 客户端和服务器端独立 Stateless无状态 ...

  8. Lua表达式

    目录 算术运算符 关系运算符 逻辑运算符 字符串连接(more) string.format转义符的使用 优先级 算术运算符 Lua 的算术运算符如下表所示: 示例代码:$expr1.lua prin ...

  9. DHCP与配置命令

    1. DHCP简介 2. DHCP主要用途 3. 使用DHCP的好处 4.DHCP经典应用模式 5.DHCP交互过程 DHCP的IP地址自动获取工作原理 6.DHCP中继    应用场景   工作原理 ...

  10. MQTT 1——物联网集成项目技术选型与说明

    最近做的JAVA项目与物联网设备有集成,记录一下从技术选型到实现,整合: 1.通信协议技术选型,MQTT技术介绍2.MQTT服务端安装,客户端测试3.MQTT客户端与Spring MVC整合 1.项目 ...