Light-industry-up.ru

Экосистема промышленности

Запись (тип данных)

09-08-2023

Структура — конструкция большинства языков программирования, позволяющая содержать в себе набор переменных различных типов. В языках семейства Pascal структуры традиционно называют записями (англ. record).

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

Содержание

Пример объявления структуры

Си

struct str_name
{
        int     member_1;
        float   member_2;
        char    member_3[256];
        /* ... */
};
// примеры инициализации структуры.
struct str_name struct0;
struct str_name struct1 = {1, 3.1416, "doit" /* ... */};
struct str_name struct2 = {member_1:2, member_2:3.1416, member_3:"doit" /* ... */};
struct str_name struct2 = {.member_1=2, .member_2=3.1416, .member_3="doit" /* ... */};

C++

struct str_name
{
        private:
                int         member_1;
                float       member_2;
        public:
                std::string member_3;
        // ...
};
// примеры инициализации структуры.
str_name struct0;
str_name struct1 = {1, 3.1416, "doit" /* ... */};
str_name struct2 = {member_1:2, member_2:3.1416, member_3:"doit" /* ... */};
str_name struct2 = {.member_1=2, .member_2=3.1416, .member_3="doit" /* ... */};

C#

struct str_name
{
        private int member_1;
        private float member_2;
        public string member_3;
        // ...
};

Pascal

type
        str_name = record begin
                public:
                        member_1 : integer;
                        member_2 : extended;
                private:
                        member_3 : string;
                { ... }
        end;

Отличия от классов

Отличия классов от структур в разных языках разнится. Отличия для языка С#:

  • Размещение : в области стека (классы — управляемая куча (heap))
  • Копирование : создаётся отдельная копия объекта которая после копирования живёт «своей жизнью» (классы — создаётся ссылка на тот же класс (т. н. instance))
  • Наследование : не разрешается дополнение своими свойствами; от него нельзя наследовать (класс — позволяет, кроме случаев когда класс создавался с ключевым словом sealed, не разрешающим наследование)
  • Передача параметров : как локальные копии переменных (в классах — как ссылки)
  • Конструктор : да, кроме конструктора по умолчанию, который не требует параметров (в классах — да, без ограничений)
  • Освобождение переменной : при выходе за пределы видимости (в классах — во время процесса сборки мусора (garbage collector))


Отличия для языка C++:

  • Члены структуры по умолчанию (без явного указания спецификатора доступа) являются публичными, а члены класса - закрытыми

Запись (тип данных).

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06