gpt4 book ai didi

c++ - 如何更改子类方法中的参数?

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:54 25 4
gpt4 key购买 nike

假设我有以下类(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.

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

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

  3. 对传递给第一个函数的参数执行 dynamic_cast 到覆盖的 virtual 成员函数中的 lib4neuro::ErrorFunctionDifferentiable &。如果 dynamic_cast 成功,则使用成功的 cast 对象调用第二个函数。如果没有,你将不得不想办法处理它。

关于c++ - 如何更改子类方法中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com