Структура (программирование)
Структура — конструкция большинства языков программирования, позволяющая содержать в себе набор переменных различных типов. В языках семейства 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++:
- Члены структуры по умолчанию (без явного указания спецификатора доступа) являются публичными, а члены класса - закрытыми
| Типы данных | |
|---|---|
| Неинтерпретируемые | |
| Числовые | |
| Текстовые | |
| Указатель | |
| Композитные |
Алгебраический тип данных (обобщённый) • Массив • Ассоциативный массив • Класс • Список • Кортеж • Объект • Option type • Product • Структура • Множество • Объединение (tagged) |
| Другие |
Логический • Низший тип • Коллекция • Перечисляемый тип • Исключение • First-class function • Opaque data type • Recursive data type • Семафор • Поток • Высший тип • Type class • Unit type • Void |
| Связанные темы | |

