exponenta event banner

MISRA C++: Правило 2008 10-1-3

Доступный базовый класс не должен быть одновременно виртуальным и невиртуальным в одной иерархии

Описание

Определение правила

Доступный базовый класс не должен быть одновременно виртуальным и невиртуальным в одной иерархии.

Объяснение

Средство проверки помечает ситуации, когда один и тот же класс наследуется как виртуальный базовый класс и невиртуальный базовый класс в том же производном классе. Эти ситуации устраняют цель виртуального наследования и вызывают несколько копий подобъекта базового класса в производном объекте класса.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

class Base {};
class Intermediate1: virtual public Base {};
class Intermediate2: virtual public Base {};
class Intermediate3: public Base {};
class Final: public Intermediate1, Intermediate2, Intermediate3 {}; //Noncompliant

В этом примере класс Base наследуется в Final как виртуальный, так и невиртуальный базовый класс. Final объект содержит по крайней мере две копии Base подобъект.

Проверить информацию

Группа: Производные классы
Категория: Обязательно
Представлен в R2013b