【问题标题】:How to change parameter in a child class method?如何更改子类方法中的参数?
【发布时间】:2019-02-15 23:20:33
【问题描述】:

假设我有以下课程:

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

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

【问题讨论】:

    标签: c++ oop inheritance


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-21
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多