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. windows下Docker Desktop安装管理

    检查要求 Windows 10 企业版.专业版或教育版 (必须windows10 1903版本以上)版本号 18362.1049+ 或 18363.1049+ ,次版本#大于.1049.最好是最新版( ...

  2. 1、Centos7下安装Oracle11gR2及多实例

    实验环境: 系统:2核8G内存60G硬盘,centos7.4: 优化操作:已经关闭了防火墙.selinux,/etc/hosts文件中以添加"172.16.1.92 slave-node2& ...

  3. .net获取项目根目录方法集合

    这篇文章是别的博客复下来,收藏的: 编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法     方法1.Environment.CurrentDirectory ...

  4. 使用.net6 WebApplication打造最小API

    .net6在preview4时给我们带来了一个新的API:WebApplication,通过这个API我们可以打造更小的轻量级API服务.今天我们来尝试一下如何使用WebApplication设计一个 ...

  5. 重新整理 .net core 实践篇————跨域问题四十一]

    前言 简单整理一下.net core 的跨域问题,这个以前也整理过比较详细的,故而在此简单整理一下. 正文 对跨域相对的就是同源,什么是同源呢? 协议相同(http/https) 主机(域名)相同 端 ...

  6. 资源:Intellij IDEA 最新旗舰版注册激活破解*附注册码(2020年亲测)

    永久激活 1. 下载jetbrains-agent.jar包(2020.03.22亲测) 链接: https://pan.baidu.com/s/1BFXPwlROEF03BkhGzGIgEA 提取码 ...

  7. 创建者模式 -- 单例模式(反射&序列化)

    看的视频:https://www.bilibili.com/video/av43896218/?p=286 实现方式:(构造器私有,提供一个外部可以访问的方法(可以提供实例)) 1.饿汉式:线程安全, ...

  8. 26 bash shell中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM(发送到进程的 TERM 信号用于要求进程终止) 和 SIGQUIT(当用户要求进程执行 core dump 时,QUIT 信 ...

  9. MVC 与 三层架构

    https://www.bilibili.com/video/av29086718/?p=24 MVC: MVC与三层架构进行比较:

  10. linux 生成密钥

    p.p1 { margin: 0; font: 16px "Helvetica Neue" } span.s1 { font: 16px ".PingFang SC&qu ...