У меня вопрос относительно концепции. Во-первых, я инженер-механик, а не программист, поэтому у меня есть некоторые знания C++, но мало опыта. Я использую метод конечных элементов (МКЭ) для решения дифференциальных уравнений в частных производных.
У меня есть базовый класс Solver и два дочерних класса linSolver для линейного FEM и nlinSolver для нелинейного FEM. Члены и методы, которые используются обоими дочерними элементами, находятся в базовом классе. Все члены базового класса protected. Таким образом, использование наследования делает дочерние классы «простыми в использовании», как будто не было никакого наследования или других ограничений. Сам базовый класс, Solver, неполный, а это означает, что мне могут быть полезны только дочерние классы.
Концепция работает на самом деле очень хорошо, но я думаю, что непригодный для использования класс — это плохой дизайн. Кроме того, я читал, что наследование protected нежелательно и его следует по возможности избегать. Я думаю, что последний пункт на самом деле не относится к моему конкретному использованию, поскольку я никогда не буду использовать его, и любая попытка сделать это потерпит неудачу (поскольку он неполный).
Вопросы:
- Распространено ли использование наследования для уменьшения двойного кода, даже если базовый класс будет непригоден для использования?
- Каковы альтернативы или лучшие решения такой проблемы?
- Действительно ли
protectedнаследование плохо?
Спасибо за ваше время. Днаиэль