Розбираємо, навіщо в C++ використовувати
final для класів і віртуальних методів: як заборона наслідування захищає інваріанти, чому поєднання
override
final фіксує контракт, як проєктувати ієрархії за принципом «база розширювана, а листя —
final» і чому
final не скасовує потреби у
virtual-деструкторі, якщо обʼєктом володіють через
std::unique_ptr<
Command>. Наприкінці — типові помилки й практичний приклад CLI-команд.