exponenta event banner

Правило AUTOSAR C++ 14 A11-0-2

Тип, определяемый как struct, должен: (1) предоставлять только элементы открытых данных, (2) не предоставлять какие-либо специальные функции или методы, (3) не быть базой другой структуры или класса, (4) не наследовать от другой структуры или класса

Описание

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

Тип, определяемый как структура, должен: (1) предоставлять только элементы общедоступных данных, (2) не предоставлять какие-либо специальные функции или методы, (3) не быть основой другой структуры или класса, (4) не наследовать от другой структуры или класса.

Объяснение

Элементы, запрещенные этим правилом, не поддерживаются для struct типы в коде C. В C++, a struct тип может иметь частные члены данных, функции-члены, наследоваться и наследоваться от других struct-s или class-es. Однако разработчик обычно связывает эти функции с class тип. Соблюдение этого правила обеспечивает использование только классов для реализации объектно-ориентированных концепций, таких как инкапсуляция и наследование данных.

Соблюдение этого правила также гарантирует, что ваш struct типы соответствуют правилам типов обычных старых данных (POD) и могут быть заменены кодом C.

Внедрение Polyspace

Флаги средства проверки struct типы с одной или несколькими из этих функций:

  • Содержит частные или защищенные элементы данных.

    struct по умолчанию участники являются открытыми.

  • Содержит функции-члены.

  • Выступает в качестве базового класса для другого struct или classили наследует от другого struct или class.

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

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

Примеры

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

#include <cstdint>
#include <iostream>

struct loginCredentials1 { //Noncompliant: Private members
    int32_t username;
private:
    int32_t pwd;   
};

struct loginCredentials2 {   //Noncompliant: Member functions
    int32_t username;
    int32_t pwd; 
    void readFromFile(std::string fileName) {
        //Read members data from file
    }
};

struct loginCredentials3 {  //Noncompliant: Acts as base for another struct
    int32_t username;
    int32_t pwd;
};

struct adminLoginCredentials: loginCredentials3 { //Noncompliant: Inherits from another struct
    std::string permissions;    
};

В этом примере все struct типы несовместимы.

  • loginCredentials1 содержит закрытый элемент данных pwd.

  • loginCredentials2 содержит функцию-член readFromFile().

  • loginCredentials3 выступает в качестве основы для структуры adminLoginCredentials.

  • adminLoginCredentials наследует от структуры loginCredentials3.

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

Группа: Управление доступом участников
Категория: Обязательно, Автоматизировано
Представлен в R2020a