如何在子类方法中更改参数?

时间:2019-02-15 23:20:34

标签: c++ oop inheritance

假设我有一个以下课程:

class LearningMethod {
public:
    virtual void optimize( lib4neuro::ErrorFunction &ef, std::ofstream* ofs = nullptr ) = 0;

    virtual std::vector<double>* get_parameters( ) = 0;
};

现在,我将从其继承并创建一个新类,其中optimize()方法将接受ErrorFunctionDifferentiable类型,该类型继承自ErrorFunction本身。

class GradientLearningMethod : public LearningMethod {
    virtual void optimize( lib4neuro::ErrorFunctionDifferentiable &ef, std::ofstream* ofs = nullptr ) = 0;
};

有没有正确的方法来实现这一目标?编译器认为,我正在创建一种新方法,而不是覆盖旧方法。

1 个答案:

答案 0 :(得分:0)

  

有没有正确的方法来实现这一目标?编译器认为,我正在创建一种新方法,而不是覆盖旧方法。

  1. 将派生类中的virtual成员函数更改为使用相同的参数类型,即lib4neuro::ErrorFunction &

  2. 在派生类中添加一个成员函数,该成员函数接受类型为lib4neuro::ErrorFunctionDifferentiable &的参数。此功能可以使用相同或不同的名称-无关紧要。

  3. 对传递给第一个函数的参数执行dynamic_cast到覆盖的lib4neuro::ErrorFunctionDifferentiable &成员函数中的virtual。如果dynamic_cast成功,则使用成功转换的对象调用第二个函数。如果没有,您将必须弄清楚如何处理它。