在if语句中创建类对象c ++

时间:2017-06-19 01:50:39

标签: class object

我实际上有一个小问题。我想创建一个属性" function"它应该来自类function1,function2或function3。有没有办法可以做到这一点?

以下是代码:

double Uppersum::evalIntegral(double p_) {
    if (functiontype == FUNKTION1){
        Function1 function;
    }
    else if (functiontype == FUNKTION2) {
        Function2 function;
    }
    else if (functiontype == FUNKTION3){
        Function3 function;
    }

    function.setParameterP(p_);
    double increment_h = (boundary_b - boundary_a)/num_subintervalls_m;
    double sum = 0;
    for (int index_i = 0; index_i < num_subintervalls_m -1; index_i++){
        double x_1 = index_i * increment_h;
        double x_2 = (index_i+1) * increment_h;

        double y_1, y_2;
        y_1 = function.evalFunctionValue(x_1);
        y_2 = function.evalFunctionValue(x_2);

        sum += increment_h * std::max(y_1, y_2);
    }
}



class Function {
 protected:
    double parameter_p;

public:
    void setParameterP(double p_);
    virtual double evalFunctionValue(double x_)=0;
};



class Function1 : public Function {
public:
    double evalFunctionValue(double x_);

};

1 个答案:

答案 0 :(得分:0)

为什么不使用继承,超类具有虚函数setParameterP和evalFunctionValue。在子类中,覆盖那些虚函数。

这是测试代码: TEST.CPP

    #include <iostream>
    typedef enum{
        FUNCTION1,
        FUNCTION2,
        FUNCTION3
    }FunctionType;

    using namespace std;
    class super
    {
    public:
        super(){}
        ~super(){}
        virtual void setParameterP() = 0;
        virtual void evalFunctionValue() = 0;
    };

    class func1:public super
    {
    public:
        func1(){}
        virtual void setParameterP(){cout<<"call setParameterP In func1"<<endl;}
        virtual void evalFunctionValue(){cout<<"call evalFunctionValue In func1"<<endl;}
    };

    class func2:public super
    {
    public:
        func2(){}
        virtual void setParameterP(){cout<<"call setParameterP In func2"<<endl;}
        virtual void evalFunctionValue(){cout<<"call evalFunctionValue In func2"<<endl;}
    };

    class func3:public super
    {
    public:
        func3(){}
        virtual void setParameterP(){cout<<"call setParameterP In func3"<<endl;}
        virtual void evalFunctionValue(){cout<<"call evalFunctionValue In func3"<<endl;}
    };

    class FuncFactory
    {
    public:
       static super* create(FunctionType var)
       {
           super* ret = nullptr;
           switch (var)
           {
               case FUNCTION1:
                    ret = new func1();
               break;
               case FUNCTION2:
                    ret = new func2();
               break;
               case FUNCTION3:
                    ret = new func3();
               break;
               default:
                cout <<"invalid FunctionType" << endl;
           }
           return ret;
       }   
    };

int main(int argc, char** argv)
{
    super* pFunc = FuncFactory::create(FUNCTION1);
    pFunc->setParameterP();
    pFunc->evalFunctionValue();
    delete pFunc;

    pFunc = FuncFactory::create(FUNCTION2);
    pFunc->setParameterP();
    pFunc->evalFunctionValue();
    delete pFunc;

    pFunc = FuncFactory::create(FUNCTION3);
    pFunc->setParameterP();
    pFunc->evalFunctionValue();
    delete pFunc;
    return 0;
}

这是处理结果: result