MISRA C++:2008 Rule 10-2-1

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

Описание

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

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

Реализация Polyspace

Чекер помечает представителей данных из разных классов конфликтующими именами, если один и тот же класс получают из этих классов. Для образца:

class B1
  {
    public:
      int count;         
      void foo ( );         
  };
class B2
  {
    public:
      int count;       
      void foo ( );         
  };

class D : public B1, public B2
  {
    public:
      void Bar ( )
      {
        ++B1::count;
        B1::foo ( );
      }
  };

Если доступ представителя данных в производном классе неоднозначен, анализ сообщает об этой проблеме как об ошибке компиляции, а не о нарушении правил кодирования. Для образца в предыдущем примере происходит ошибка компиляции, если класс D переписывается как:

class D : public B1, public B2
  {
    public:
      void Bar ( )
      {
        ++count;      // Is that B1::count or B2::count?
        foo ( );      // Is that B1::foo() or B2::foo()?
      }
  };

Чекер не проверяет конфликты между сущностями разных видов, для образца представителя функции против представителей данных.

Поиск и устранение проблем

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

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

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