当前位置: 首页 > news >正文

C++学习记录--b站黑马程序员视频——55 类和对象-多态-案例1-计算器类

 55 类和对象-多态-案例1-计算器类

#include<iostream>
using namespace std;
#include <string>
// 分别利用普通写法和多态技术实现计算器// 普通写法
class Calculator
{
public:int getResult(string oper) {if (oper == "+") {return m_Num1 + m_Num2;}else if (oper == "-") {return m_Num1 - m_Num2;}else if (oper == "*"){return m_Num1 * m_Num2;}// 如果想扩展新的功能,需修改源码// 在真实开发中,提倡开闭原则// 开闭原则:对扩展进行开发,对修改进行关闭}int m_Num1; // 操作数1int m_Num2; // 操作数2
};void test01() {// 创建计算器对象Calculator c;c.m_Num1 = 10;c.m_Num2 = 10;cout << c.m_Num1 << " + " << c.m_Num2 << " = " << c.getResult("+") << endl;cout << c.m_Num1 << " - " << c.m_Num2 << " = " << c.getResult("-") << endl;cout << c.m_Num1 << " * " << c.m_Num2 << " = " << c.getResult("*") << endl;
}// 利用多态实现计算器
// 多态好处:
// 1、组织结构清晰
// 2、可读性强
// 3、对于前期和后期扩展以及维护性高// 实现计算器抽象类
class AbstractCalculator {
public:virtual int getResult() {return 0;}int m_Num1;int m_Num2;
};// 加法计算器类
class AddCalculator :public AbstractCalculator {int getResult() {return m_Num1 + m_Num2;}
};// 减法计算器类
class SubCalculator :public AbstractCalculator {int getResult() {return m_Num1 - m_Num2;}
};// 乘法计算器类
class MulCalculator :public AbstractCalculator {int getResult() {return m_Num1 * m_Num2;}
};void test02() {// 多态使用条件// 父类指针或者引用指向子类对象// 加法运算AbstractCalculator* abc = new AddCalculator; abc->m_Num1 = 40;abc->m_Num2 = 20;cout << abc->m_Num1 << " + " << abc->m_Num2 << " = " << abc->getResult() << endl;// 用完后记得销毁delete abc;// 减法运算abc = new SubCalculator;abc->m_Num1 = 40;abc->m_Num2 = 20;cout << abc->m_Num1 << " - " << abc->m_Num2 << " = " << abc->getResult() << endl;delete abc;// 乘法运算abc = new MulCalculator;abc->m_Num1 = 40;abc->m_Num2 = 20;cout << abc->m_Num1 << " * " << abc->m_Num2 << " = " << abc->getResult() << endl;delete abc;}int main() {// test01();test02();system("pause");return 0;
}


http://www.mrgr.cn/news/81290.html

相关文章:

  • Kibana8.17.0在mac上的安装
  • RAID5原理简介和相关问题
  • 2024_12_20_生活记录
  • ubuntu22.04安装PaddleX3
  • 教师资格证报考条件15篇
  • windows下Redis的使用
  • Python(第一天)
  • 结合实例从HCI层分析经典蓝牙连接和鉴权过程
  • Vue3中路由跳转之后删除携带的query参数
  • 蓝牙协议——音乐启停控制
  • 深入理解批量归一化(BN):原理、缺陷与跨小批量归一化(CBN)
  • 类设计者的核查表
  • 耗时半月,终于把牛客网上的软件测试面试八股文整理成了PDF合集(测试基础+linux+MySQL+接口测试+自动化测试+测试框架+jmeter测试+测试开发)
  • shiro权限校验demo
  • 高并发处理 --- Caffeine内存缓存库
  • 图解JVM整体结构、执行流程以及2种架构模型,你学会了吗?
  • 绕组识别标签规范
  • 【基于rust-wasm的前端页面转pdf组件和示例】
  • 蓝牙协议——音量控制
  • Django 管理命令中使用 `logging` 和 输出样式
  • 只谈C++11新特性 - 显式虚函数重写
  • docker 安装minio
  • es 中使用update 、create 、index的区别
  • MQTT协议在树莓派上的安全性和性能测试及其在物联网应用中的应用
  • Dubbo 3.x源码(28)—Dubbo服务发布导出源码(7)应用级服务接口元数据发布
  • 物理层知识要点