11.7.2重学C++之【多态案例--计算器类】

#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;
}

猜你喜欢

转载自blog.csdn.net/HAIFEI666/article/details/114934048