【C++学习笔记】练习小项目之多态实现计算器
一、功能描述
二、代码实现
1.普通实现
2.多态实现
三、学习后记
一、功能描述
实现可以进行两个数加减乘的整数型计算器。
二、代码实现
1.普通实现
//1.普通写法
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;
int m_num2;
};
void test1()
{
//创建计算器对象;
Calculator c;
c.m_num1 = 50;
c.m_num2 = 20;
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;
}
2.多态实现
//2.多态写法
//多态的优点:组织清晰;可读性强;前期和后期扩展以及维护性高
//计算机抽象类
class AbstractCalculator
{
public:
virtual int getResult()
{
return 0;
}
int m_num1;
int m_num2;
};
//加法计算器类
class Add : public AbstractCalculator
{
public:
int getResult()
{
return m_num1+ m_num2;
}
};
//减法计算器类
class Sub : public AbstractCalculator
{
public:
int getResult()
{
return m_num1 - m_num2;
}
};
//乘法计算器类
class Mul : public AbstractCalculator
{
public:
int getResult()
{
return m_num1 * m_num2;
}
};
void test2()
{
//加法运算
AbstractCalculator *abc = new Add;
abc->m_num1 = 20;
abc->m_num2 = 10;
cout << abc->m_num1 << " + " << abc->m_num2 << " = " << abc->getResult() << endl;
//用完销毁
delete abc;
//减法运算
abc = new Sub;
abc->m_num1 = 20;
abc->m_num2 = 10;
cout << abc->m_num1 << " - " << abc->m_num2 << " = " << abc->getResult() << endl;
delete abc;
//乘法运算
abc = new Mul;
abc->m_num1 = 20;
abc->m_num2 = 10;
cout << abc->m_num1 << " * " << abc->m_num2 << " = " << abc->getResult() << endl;
delete abc;
}
主函数:
int main()
{
//test1();
test2();
system("pause");
return 0;
}
三、学习后记
相比于普通写法,虽然多态写法看起来代码量更多,但是多态具有许多优点:组织清晰;可读性强;前期和后期扩展以及维护性高。要熟练掌握多态的用法。
多态分类:
1.静态多态:函数重载 和 运算符重载 属于静态多态,复用函数名
2.动态多态:派生类 和 虚函数 实现运行时多态
二者区别:
1.静态多态的函数地址早绑定,在编译阶段确定函数地址;
2.动态多态的函数地址晚绑定,在运行阶段确定函数地址。
动态多态满足条件:
1.有继承关系
2.子类重写父类虚函数
继续加油吧!