假设我有以下类(class):
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;
};
有没有正确的方法来实现这个?编译器认为,我正在创建一个新方法而不是覆盖旧方法。
最佳答案
Is there any correct way how to implement this? Compiler thinks, that I'm creating a new method and not overwriting an old one.
更改派生类中的
virtual
成员函数以使用相同的参数类型,即lib4neuro::ErrorFunction &
。在派生类中添加一个成员函数,该成员函数接受
lib4neuro::ErrorFunctionDifferentiable &
类型的参数。此函数可以使用相同的名称或不同的名称 - 这无关紧要。对传递给第一个函数的参数执行
dynamic_cast
到覆盖的virtual
成员函数中的lib4neuro::ErrorFunctionDifferentiable &
。如果dynamic_cast
成功,则使用成功的 cast 对象调用第二个函数。如果没有,你将不得不想办法处理它。
关于c++ - 如何更改子类方法中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718291/