Структура (программирование) | это... Что такое Структура (программирование)? (original) (raw)
Структура — конструкция большинства языков программирования, позволяющая содержать в себе набор переменных различных типов. В языках семейства 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 |
Связанные темы | Абстрактный тип данных • Структура данных • Интерфейс • Kind (type theory) • Примитивный тип • Subtyping • Шаблоны C++ • Конструктор типа • Parametric polymorphism |