AUTOSAR C++14 Rule A11-0-2

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

Описание

Управляйте определением

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

Объяснение

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

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

Реализация 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 действия как основа для struct adminLoginCredentials.

  • adminLoginCredentials наследовал от struct loginCredentials3.

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

Группа: управление доступом члена

Введенный в R2020a