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;
}