假设我有一个以下课程:
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;
};
有没有正确的方法来实现这一目标?编译器认为,我正在创建一种新方法,而不是覆盖旧方法。
答案 0 :(得分:0)
有没有正确的方法来实现这一目标?编译器认为,我正在创建一种新方法,而不是覆盖旧方法。
将派生类中的virtual
成员函数更改为使用相同的参数类型,即lib4neuro::ErrorFunction &
。
在派生类中添加一个成员函数,该成员函数接受类型为lib4neuro::ErrorFunctionDifferentiable &
的参数。此功能可以使用相同或不同的名称-无关紧要。
对传递给第一个函数的参数执行dynamic_cast
到覆盖的lib4neuro::ErrorFunctionDifferentiable &
成员函数中的virtual
。如果dynamic_cast
成功,则使用成功转换的对象调用第二个函数。如果没有,您将必须弄清楚如何处理它。