Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии
Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии.
Это правило менее строго, чем 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 {};Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: производные классы |
| Категория: необходимый |