#include <iostream>
using namespace std;
class Operation //运算类
{
private:
    double num1;
    double num2;
public:

    Operation(){}
    double getNum1()
    {
        return num1;
    }
    double getNum2()
    {
        return num2;
    }
    void setNum1(double x)
    {
        num1=x;
    }
    void setNum2(double x)
    {
        num2=x;
    }
    double  virtual getResult()
    {
        return 0;
    }
};
class OpAdd: public Operation//加法类
{
public:
    double getResult()
    {
       double  result=0;

        result = getNum1()+getNum2();
        return result;
    }
};
class OpSub:public Operation//减法类
{
    double getResult()
    {
        double result=0;
        result = getNum1()-getNum2();
        return result;
    }
};
class OpMul:public Operation//乘法类
{
    double getResult()
    {
        double result=0;
        result = getNum1()*getNum2();
        return result;
    }
};
class OpDiv:public Operation// 除法类
{
    double getResult()
    {
        double result=0;
        if(getNum2()==0)
            throw "除数不能为0";
        else
            result = getNum1()/getNum2();
        return result;
    }
};
class OpFactory//工厂类
{
public :
    static Operation *createOperation(char operate)//因为这里使用的是多态,所以需要用指针
    {
        Operation *oper=NULL;//NULL需要大写
        switch(operate)//switch需要是char类型的
        {
        case '+':
            oper= new OpAdd();
            break;
        case '-':
            oper=new OpSub();
            break;
        case '*':
            oper=new OpMul();
            break;
        case '/':
            oper=new OpDiv();
            break;
        }

        return oper;
    }
};
int main()
{
    Operation *oper;//因为工厂类的返回值是一个指针
    OpFactory of;
    char op;
    double x,y;
    cin>>x>>op>>y;
    oper =of.createOperation(op);
    oper->setNum1(x);
    oper->setNum2(y);
    double result=oper->getResult();
    cout<<result<<endl;
}

在c++中,子类想要重载父类的成员函数,需要先将 父类的成员函数声明为是一个虚函数。

多态的实现需要指针

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐