Из прочтения этого ответа ( Возможно ли переопределить функцию в дочернем классе C ++ без использования виртуального ключевого слова для функции в родительском классе, который является абстрактным? ), очевидно, что нельзя переопределить родительский классфункция из дочернего класса.
Тем не менее, мне нужно что-то, что работает, как это.Вот нефункциональная установка, которая описывает то, что я пытаюсь сделать.
class Parent {
public:
Graph createGraph() {
return new Graph([this](float x){
return this->getY(x);
});
}
float getY(float x) {
return sin(x);
}
}
.
class Child: public Parent {
public:
float getY(float x) {
return x * x;
}
}
Важными моментами моей настройки является то, что у меня есть родительский класс, который имеетфункция, которая последовательно ссылается на функцию, которая часто перегружается дочерними классами.Исходя из земли Java / Javascript, мой подход заключается в том, чтобы сделать то, что вы видите выше, но, похоже, я неправильно думаю об этом для c ++.
Как я могу симулировать (то есть получить относительно схожую функциональность) с этимформа переопределения?
Я знаю, что, не будучи СУХИМ, я мог бы скопировать / paset createGraph
в оба, и это сработало бы.И если так поступил бы опытный разработчик c ++, то для меня этого достаточно.Но сейчас я ищу способ подойти к этой проблеме, такой же СУХОЙ, как мой более похожий на java способ.
РЕДАКТИРОВАТЬ: казалось бы, основная проблема здесь заключается в том, что я неправильно понял, что virtual
делает, предполагая, что это означает, что не может быть определения функции в родительском классе (аналогично абстрактным функциям в других языках).Дело обстоит не так, кажется, что virtual делает что-то еще, что допускает абстрактные классы, но не требует их.