AUTOSAR C++14 Rule A11-0-2

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

Описание

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

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

Объяснение

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

Соблюдение этого правила также гарантирует, что ваше struct типы соответствуют правилам простых типов Old Data (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