Чтобы избежать ошибок, связанных с абстрактными классами и виртуальными функциями, можно придерживаться следующих рекомендаций:
- Использовать виртуальные функции только в иерархиях классов. 1 Если нет иерархии наследования, механизм виртуальных функций не работает. 1
- Объявлять виртуальными только те методы, которые будут переопределены в производных классах. 4 Методы, которые во всей иерархии останутся неизменными или которыми производные классы пользоваться не будут, делать виртуальными нет смысла. 4
- При наследовании абстрактного класса переопределять в производном классе все чисто виртуальные функции. 1 В противном случае компилятор выдаст ошибку. 1
- Проверять каждое переопределение в подклассе на целостность с исходным описанием в родительском классе. 3 Подкласс должен соблюдать требования, установленные в родительском классе. 3
- Использовать альтернативы наследованию, например вложение, когда один класс включает в себя поля, являющиеся классами или указателями на них. 4
Также рекомендуется избегать скоропалительных решений при объектно-ориентированном проектировании. 3 Лучше оттягивать окончательные решения до самого последнего момента, чтобы предотвратить появление ошибок на ранних стадиях программирования. 3