#include<stdlib.h>
#include<iostream>
#include<string>
using namespace std;
/*
4.7.2 多态案例--计算器类
案例描述:
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
多态的优点:
代码组织结构清晰
可读性强
利于前期和后期的扩展以及维护
*/
class Calculator{
public:
int num1;
int num2;
int get_result(string oper){
if(oper == "+"){
return num1+num2;
}else if(oper == "-"){
return num1-num2;
}else if(oper == "*"){
return num1*num2;
}else if(oper == "/"){
return num1/num2;
}
// 如果要提供新的运算或扩展新的功能,需要修改源码
// 在真实开发总,提倡开闭原则(对扩展进行开放,对修改进行关闭)
}
};
void test1(){
Calculator c;
c.num1 = 10;
c.num2 = 10;
cout << c.get_result("+") << endl;
cout << c.get_result("-") << endl;
cout << c.get_result("*") << endl;
cout << c.get_result("/") << endl;
}
// 利用多态实现计算器
class AbstractCalculator{ // 抽象类
public:
int num1;
int num2;
virtual int get_result(){ // 虚函数
return 0;
}
};
class AddCalcu : public AbstractCalculator{
public:
int get_result(){
return num1+num2;
}
};
class SubCalcu : public AbstractCalculator{
public:
int get_result(){
return num1-num2;
}
};
class MulCalcu : public AbstractCalculator{
public:
int get_result(){
return num1*num2;
}
};
void test2(){
// 动态多态的使用条件:父类的指针或者引用 执行 子类对象
AbstractCalculator * abc = new AddCalcu; // new出来的数据在堆区,手动开辟手动释放
abc->num1 = 100;
abc->num2 = 100;
cout << abc->get_result() << endl;
delete abc;
abc = new SubCalcu;
abc->num1 = 100;
abc->num2 = 100;
cout << abc->get_result() << endl;
delete abc;
abc = new MulCalcu;
abc->num1 = 100;
abc->num2 = 100;
cout << abc->get_result() << endl;
delete abc;
}
int main()
{
test1();
test2();
system("pause");
return 0;
}
11.7.2重学C++之【多态案例--计算器类】
猜你喜欢
转载自blog.csdn.net/HAIFEI666/article/details/114934048
今日推荐
周排行