Classes and class hierarchies
C.132
Не делайте функцию `virtual` без причины
Причина
Избыточный virtual увеличивает время выполнения и размер объектного кода. Виртуальная функция может быть переопределена и, таким образом, открыта для ошибок в производном классе. Виртуальная функция обеспечивает дублирование кода в шаблонной иерархии.
Плохой пример
template<class T>
class Vector {
public:
// ...
virtual int size() const { return sz; } // bad: what good could a derived class do?
private:
T* elem; // the elements
int sz; // number of elements
};
Этот вид "вектора" не предназначен для использования как базовый класс вообще.
Применение
- Отметьте класс с виртуальными функциями, но без производных классов.
- Отметьте класс, в котором все функции-члены являются virtual и имеют реализации.