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