C++ 多态案例(一)- 计算器类
作者:CtrlX
- 2022 年 8 月 19 日 山东
本文字数:1254 字
阅读完需:约 4 分钟

多态案例一-计算器类
案例描述:
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
多态的优点:
代码组织结构清晰
可读性强
利于前期和后期的扩展以及维护
示例:
//普通实现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; } //如果要提供新的运算,需要修改源码 }public: int m_Num1; int m_Num2;};
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;}
int main() {
test01();
system("pause");
return 0;}
复制代码
//多态实现//抽象计算器类//多态优点:代码组织结构清晰(哪里出问题直接定位),可读性强,利于前期和后期的扩展(想添加什么功能直接添加相关类)以及维护(哪里出问题直接定位,一个功能出问题不影响其他功能)class AbstractCalculator{public :
virtual int getResult() { return 0; }
int m_Num1; int m_Num2;};
//加法计算器class AddCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 + m_Num2; }};
//减法计算器class SubCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 - m_Num2; }};
//乘法计算器class MulCalculator :public AbstractCalculator{public: int getResult() { return m_Num1 * m_Num2; }};
void test02(){ //创建加法计算器 AbstractCalculator *abc = new AddCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " + " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc; //用完了记得销毁
//创建减法计算器 abc = new SubCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " - " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc;
//创建乘法计算器 abc = new MulCalculator; abc->m_Num1 = 10; abc->m_Num2 = 10; cout << abc->m_Num1 << " * " << abc->m_Num2 << " = " << abc->getResult() << endl; delete abc;}
int main() {
//test01();
test02();
system("pause");
return 0;}
复制代码
多态优点:代码组织结构清晰(哪里出问题直接定位),可读性强,利于前期和后期的扩展(想添加什么功能直接添加相关类)以及维护(哪里出问题直接定位,一个功能出问题不影响其他功能)
总结:C++开发提倡利用多态设计程序架构,因为多态优点很多
划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【CtrlX】的原创文章。
原文链接:【http://xie.infoq.cn/article/5d86e03ed269c12ec75e8ffb3】。文章转载请联系作者。
CtrlX
关注
Pain is inevitable,suffering is optional 2022.08.01 加入
【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。









评论