Базовый класс объявляется виртуальным только в том случае, если он используется в алмазной иерархии
Базовый класс объявляется виртуальным только в том случае, если он используется в алмазной иерархии.
Это правило менее ограничительно, чем MISRA C++:2008 Rule 10-1-1. Правило 10-1-1 запрещает использование виртуальной базы в любом месте кода, поскольку виртуальная база может привести к потенциально запутанному поведению.
Правило 10-1-2 допускает использование виртуальных баз в той ситуации, когда они полезны, то есть в качестве общего базового класса в алмазных иерархиях.
Например, следующая иерархия алмазов нарушает правило 10-1-1, но не правило 10-1-2.
class Base {};
class Intermediate1: public virtual Base {};
class Intermediate2: public virtual Base {};
class Final: public Intermediate1, public Intermediate2 {};Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Производные классы |
| Категория: Обязательно |