Как изменить параметр в методе дочернего класса? - PullRequest
0 голосов
/ 16 февраля 2019

Допустим, у меня есть следующий класс:

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 голосов
/ 16 февраля 2019

Есть ли правильный способ, как это реализовать?Компилятор считает, что я создаю новый метод, а не перезаписываю старый.

  1. Измените функцию-член virtual в производном классе, чтобы использовать тот же тип аргумента,т.е. lib4neuro::ErrorFunction &.

  2. Добавить функцию-член в производный класс, которая принимает аргумент типа lib4neuro::ErrorFunctionDifferentiable &.Эта функция может использовать то же имя или другое имя - это несущественно.

  3. Выполнить dynamic_cast для аргумента, переданного первой функции lib4neuro::ErrorFunctionDifferentiable & в переопределенном члене virtualфункция.Если dynamic_cast успешен, вызовите вторую функцию с успешно приведенным объектом.Если нет, вам придется выяснить, как с этим бороться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...