C++Note 多态案例1---计算器类
多态的优点:
代码组织结构清晰
可读性强
利用前期和后期的扩展和维护
案例:分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
普通写法:
1 //普通写法 2 //计算器类 3 class Calculator 4 { 5 public: 6 int getResult(string oper)//oper:操作符 7 { 8 if (oper == "+") 9 { 10 return m_Num1 + m_Num2; 11 } 12 else if (oper == "-") 13 { 14 return m_Num1 - m_Num2; 15 } 16 else if (oper == "*") 17 { 18 return m_Num1 * m_Num2; 19 } 20 //如果要扩展新的功能(例如除法) 则需要修改源码 21 //在实际开发中 提倡 开闭原则 22 //开闭原则:对扩展进行开放 对修改进行关闭 23 } 24 int m_Num1;//操作数1 25 int m_Num2;//操作数2 26 }; 27 void test() 28 { 29 //创建计算器对象 30 Calculator c; 31 c.m_Num1 = 10; 32 c.m_Num2 = 10; 33 cout << c.m_Num1 << "+" << c.m_Num2 << "=" << c.getResult("+") << endl; 34 cout << c.m_Num1 << "-" << c.m_Num2 << "=" << c.getResult("-") << endl; 35 cout << c.m_Num1 << "*" << c.m_Num2 << "=" << c.getResult("*") << endl; 36 }
多态写法:
1 #include <iostream> 2 using namespace std; 3 //多态写法 4 //实现计算机抽象类 5 class AbstractCalculator 6 { 7 public: 8 virtual int getResult() 9 { 10 return 0; 11 } 12 int m_Num1; 13 int m_Num2; 14 }; 15 //加法计算器类 16 class AddCalculator :public AbstractCalculator 17 { 18 public: 19 int getResult() 20 { 21 return m_Num1 + m_Num2; 22 } 23 }; 24 class SubCalculator :public AbstractCalculator 25 { 26 public: 27 int getResult() 28 { 29 return m_Num1 - m_Num2; 30 } 31 }; 32 class MulCalculator :public AbstractCalculator 33 { 34 public: 35 int getResult() 36 { 37 return m_Num1 * m_Num2; 38 } 39 }; 40 void test() 41 { 42 //多态使用条件 43 //父类指针或者引用指向子类对象 44 //加法运算 45 AbstractCalculator* abc = new AddCalculator; 46 abc->m_Num1 = 100; 47 abc->m_Num2 = 100; 48 cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl; 49 //堆区数据(new 程序员自行开辟释放) 用完后记得销毁 50 delete abc; 51 //减法运算 52 abc = new SubCalculator; 53 abc->m_Num1 = 100; 54 abc->m_Num2 = 100; 55 cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl; 56 //用完销毁 57 delete abc; 58 } 59 //多态好处: 60 //1.功能切分 组织结构清晰 可针对某个小技术进行修改完善 不用全部修改 61 //2.可读性强 功能切分后每个功能详细 62 //3.对于前期扩展和后期维护性高 63 int main() 64 { 65 test(); 66 system("pause"); 67 return 0; 68 }
C++开发提倡用多态书写代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)