Составной тип данных

редактировать

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

Содержание
  • 1 Структуры и классы C / C ++
    • 1.1 Объявление
    • 1.2 Создание экземпляра
    • 1.3 Доступ к членам
    • 1.4 Примитивный подтип
  • 2 Сигнатура типа
  • 3 См. Также
  • 4 Ссылки
Структуры и классы C / C ++

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

В C ++ единственная разница между structи class - это уровень доступа по умолчанию, который является частным для классов и общедоступным для structs.

Обратите внимание, что хотя классы и classключевое слово были совершенно новыми в C ++, язык программирования C уже имел грубый тип structs. Для всех намерений и целей C ++ structобразуют надмножество из C structs: практически все действительные структуры C structявляются действительными C ++ structс той же семантикой.

Объявление

A Объявление structсостоит из списка полей, каждое из которых может иметь любой тип. Общий объем хранилища, необходимый для объекта struct, представляет собой сумму требований к хранилищу всех полей плюс любые внутренние заполнение.

. Например:

struct Account {int account_number; char * first_name; char * last_name; плавающий баланс; };

определяет тип, обозначенный как struct Account. Чтобы создать новую переменную этого типа, мы можем написать struct Account myAccount;, которая имеет целочисленный компонент, доступ к которому осуществляется myAccount.account_number, и компонент с плавающей запятой, доступ к которому осуществляется myAccount.balance, а также компоненты first_nameи last_name. Структура myAccountсодержит все четыре значения, и все четыре поля могут быть изменены независимо.

Поскольку многократное написание struct Accountв коде становится обременительным, нет ничего необычного в том, чтобы увидеть оператор typedefв коде C, чтобы обеспечить более удобный синоним для struct.

Например:

typedef struct Account_ {int account_number; char * first_name; char * last_name; плавающий баланс; } Счет;

В коде C ++ typedef не требуется, потому что типы, определенные с помощью struct, уже являются частью обычного пространства имен, поэтому на тип можно ссылаться как struct Accountили просто Account.

В качестве другого примера, трехмерный составной тип Vector, который использует тип данных с плавающей запятой, может быть создан с помощью:

struct Vector {float x ; float y; float z; };

Переменная с именем velocityс составным типом Vectorбудет объявлена ​​как Vector velocity;будут доступны члены velocityиспользуя точечную нотацию. Например, velocity.x = 5;установит компонент xдля velocityравным 5.

Аналогичным образом цветовая структура может может быть создан с использованием:

struct Color {unsigned int red; unsigned int зеленый; беззнаковый int синий; };

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

struct Vertex {Vector position ; Цвет цвет; };

Создание экземпляра

Создайте переменную типа struct Vertex, используя тот же формат, что и раньше: Vertex v;

Доступ к члену

Назначьте значения для компоненты vвыглядят так:

v.position.x = 0,0; v.position.y = 1,5; v.position.z = 0,0; v.color.red = 128; v.color.green = 0; v.color.blue = 255;

Примитивный подтип

Основное использование struct- это создание сложных типов данных, но иногда он используется для создания примитивного структурного подтипа. Например, поскольку Стандарт C требует, чтобы если две структуры имели одинаковые начальные поля, эти поля были представлены одинаково, код

struct ifoo_old_stub {long x, y; }; struct ifoo_version_42 {длинные x, y, z; название символа; длинные а, б, в; }; недействительна operation_on_ifoo (struct ifoo_old_stub *); struct ifoo_version_42 s;... operation_on_ifoo (s);

будет работать правильно.

Сигнатура типа

Сигнатура типа (или Типы функций ) конструируются из примитивных и составных типов и сами могут служить типами при создании составных типов:

typedef struct {int x; int y; } Point; typedef double (* Metric) (точка p1, точка p2); typedef struct {Центр точки; двойной радиус; Метрическая метрика; } Круг;
См. Также
Ссылки
Последняя правка сделана 2021-05-15 08:19:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте