分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类)
普通写法
#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;
}
}
public:
int m_Num1;
int m_Num2;
};
void test() {
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() {
test();
system("pause");
return 0;
}
如果要提供新的运算,需要修改源码
在实际开发中,提倡开闭原则
开闭原则:对扩展进行开放,对修改进行关闭
多态技术
功能独立,便于维护与后续开发
#include <iostream>
using namespace std;
#include <string>
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 test(){
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() {
test();
system("pause");
return 0;
}
运行结果:
总结:C++开发提倡利用多态设计程序架构,因为多态优点很多
优点:
1、组织结构清晰
2、可读性强
3、便于前期和后期的扩展以及维护性高