Потребителски дефинирани типове данни в C

Статии за ИТ, програмиране, политика, икономика, живот и изучаване на научни дисциплини

В реални проблеми информацията, която трябва да бъде обработена, може да има доста сложна структура. За адекватното му представяне се използват типове данни, които се изграждат на базата на прости типове данни, масиви и указатели. Езикът C ++ позволява на програмиста да дефинира свои собствени типове данни и правила за работа с тях. В исторически план за такива типове е имало име, дадено в заглавието на статията, въпреки че би било по-правилно да ги наричаме типове, определени от програмиста.

Преименуване на тип (typedef)

За да направите програмата по-ясна, можете да дадете на типа ново име, използвайки ключовата дума typedef:

typedef тип new_name [измерение];

В този случай квадратните скоби са синтаксисен елемент. Измерението може да липсва. Примери:

typedef неподписан int UINT;
typedef char Msg [100];
typedef struct <
char f1o [30];
int дата, код;
двойна заплата; > Работник;

Името, въведено по този начин, може да се използва по същия начин като имената на стандартните типове:

UINT i, j; // две променливи от неподписан тип int
Съобщение str [10]; // масив от 10 реда, по 100 знака всеки
Работен персонал [100]; // масив от 100 структури

В допълнение към дефинирането на по-кратки псевдоимена за типове с дълги описания, typedef се използва за улесняване на преносимостта на програмите: ако машинно зависимите типове са декларирани с помощта на typedef оператори, при пренасяне на програма ще трябва да правите промени само на тези оператори.

Изброявания (enum)

Когато пишете програми, често е необходимо да дефинирате няколко имена константи, които изискват всички те да имат различни значения (въпреки че конкретните стойности може да не са важни). За това е удобно да се използва изброен тип данни, всички възможни стойности на които са определени от списък с целочислени константи. Формат:

Името на типа се задава, ако програмата трябва да дефинира променливи от този тип. Компилаторът гарантира, че тези променливи приемат стойности само от списък с константи. Константите трябва да са цели числа и могат да бъдат инициализирани по обичайния начин. При липса на инициализатор първата константа се занулява и на всяка следваща се присвоява по-голяма стойност от предишната:

enum Грешка < ERR__READ, ERR__WRITE, ERR_CONVERT >;
Грешка при грешка;
превключвател (грешка) <
случай ERR_READ:/* изявления */почивка;
случай ERR_WRITE:/* изявления */почивка;
случай ERR_CONVERT:/* изявления */почивка;
>

На константите ERR_READ, ERR_WRITE, ERR_CONVERT се присвояват съответно стойностите 0, 1 и 2.

На константите три и четири се присвояват стойностите 3 и 4, а константата единадесет е 11.

Имената на изброените константи трябва да бъдат уникални и стойностите могат да бъдат еднакви. Предимството на използването на изброяване пред декларирането на имената на константите и директивата #define е, че свързаните константи са по-ясни; освен това компилаторът може да прави проверка на типа при инициализиране на константи.

При извършване на аритметични операции изброяванията се преобразуват в цели числа. Тъй като изброяванията са дефинирани от потребителя типове, можете да пишете свои собствени операции върху тях.

Структури (struct)

За разлика от масив, всички елементи на който са от един и същи тип, една структура може да съдържа елементи от различни типове. В C ++ структурата е вид клас и има всичките си свойства, но в много случаи е достатъчно да се използват структури, както са дефинирани в C: