Jump to content

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

(Перенаправлено с составного типа )

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

Структуры и классы C/C++

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

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

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

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

Декларация

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

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

Например:

struct Account {
    int account_number;
    char *first_name;
    char *last_name;
    float balance;
};

тип, называемый определяет 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;
    float  balance;
} Account;

В коде 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 green;
    unsigned int blue;
};

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

struct Vertex {
    Vector position;
    Color color;
};

Диаграмма классов UML

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

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

Создайте переменную типа 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 {
    long x, y, z;
    char *name;
    long a, b, c;
};
void operate_on_ifoo(struct ifoo_old_stub *);
struct ifoo_version_42 s;
. . .
operate_on_ifoo(&s);

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

Введите подпись

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

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

typedef struct {
    int x;
    int y;
} Point;

typedef double (*Metric) (Point p1, Point p2);

typedef struct {
    Point centre;
    double radius;
    Metric metric;
} Circle;

См. также

[ редактировать ]
  1. ^ Хау, Денис. «Бесплатный онлайн-словарь по информатике» . Foldoc.org . Проверено 6 февраля 2023 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d78f6ed55be42344946b173e8f516631__1721787900
URL1:https://arc.ask3.ru/arc/aa/d7/31/d78f6ed55be42344946b173e8f516631.html
Заголовок, (Title) документа по адресу, URL1:
Composite data type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)