Есть класс TFunction — математическая функция наподобие f(x). У этого класса есть наследники — TFunctionParabola и TFunctionHyperbola (соответственно парабола и гипербола). У TFunction есть свойство Expression — выражение функции, наследники его наследуют.
Ситуация: у объекта класса TFunctionParabola свойство Expression = 'x^2+1'. Юзер меняет Expression на '1/x'. При этом подразумевается, что класс объекта должен измениться на TFunctionHyperbola. Меняться он должен потому, что впоследствии проге нужна будет инфа о том, к какому классу принадлежит функция, чтобы выводить данные присущие только данному классу функций (например, уравнение асимптоты). Как это сделать? Мне видится следующее решение:
(Небольшое дополнение. Все объекты функций принадлежат некоторому объекту класса TGraph, т.е. у класса TGraph есть массив элементов типа TFunction)
В TFunctionParabola.SetExpression вызывается метод TGraph.EditExpression, который уничтожит объект данной функции и создаст на его месте объект класса TFunctionHyperbola с заданным Expression. Недостаток: надо быть уверенным, что программа после вызова TGraph.EditExpression в процедуре TFunctionParabola.SetExpression не будет блуждать по коду, относящемуся к TFunctionParabola, иначе ненароком налетит на AccessViolation.
Поделитесь, пожалуйста, своими мыслями. Решение можно улучшить или оно в корне неправильно?