Данные, определяемые программистом в С++

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

Для удобства и понятности программы, можно задать типу новое имя с помощью ключевого слова typedef:
typedef тип новое_имя [ размерность ] ;
Квадратные скобки - элементом синтаксиса. Размерность может отсутствовать.

Примеры:

Переопределение
typedef unsigned int UINT: 
typedef char Msg[100]; 
typedef struct{ 
char fio[30]; 
int date, code;
double salary;} Worker;
Использование вместо стандартных:
UINT i , j ; // переменные типа unsigned int 
Msg str[10]; // массив из 10 строк по 100 символов 
Worker staff[100]; // массив из 100 структур
Перечисления - enum

Можно определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения (при этом конкретные значения могут быть не важны).

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

Формат:
enum [ имя_типа ] { список_констант };
Имя типа задается в том случае, если в программе требуется определять пере­менные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант. Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается на единицу большее значение, чем предыдущей:

Пример.
enum Err {ERR__READ. ERR__WRITE. ERR_CONVERT}; 
Err error;
……
switch (error){ 
case ERR_READ; / * операторы */ break; 
case ERR_WRITE; / * операторы */ break; 
case ERR_CONVERT; / * операторы */ break; 
}
Константами ERR_READ, ERR_WRITE, ERR_CONVERT получены значения 0, 1, 2

Пример:
enum {two = 2, three, four, ten = 10, eleven, fifty = ten + 40};
Константам three и four присваиваются значения 3 и 4, константе eleven — 11.

Имена перечисляемых констант должны быть уникальными, а значения могут совпадать.

Преимущество описания в наглядности; кроме того, компилятор при инициализации констант может выполнять проверку типов.

При выполнении арифметических операций перечисления преобразуются в целые.

Структуры (struct) - аналог записей в Паскале

В отличие от массива, все элементы которого однотипны, структура может со­ держать элементы разных типов. В языке C++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:
struct [имя_типа] { 
тип_1 элемент_1;
тип_2 элемент_2; 
тип_n элемент_n; 
} [список_описателей]; 
Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.

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

Пример. Определение массива структур и указателя на структуру:
struct { 
char fio[30]: 
int date, code;
double salary; 
}staff[100], *ps;
Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами.

Пример.
struct Worker{ //описание нового типа Worker
char fio[30]; 
int date,code; 
double salary;
};//описание заканчивается точкой с запятой 
Worker staff[100],*ps; //Определение массива типа Worker и указателя 
Имя структуры можно использовать сразу после его объявления (определение можно дать позднее) в тех случаях, когда компилятору не требуется знать размер структуры, например:
struct List; //объявление структуры List 
struct Link{ 
List *p; //указатель на структуру List 
Link *prev, *succ; // указатели на структуру Link 
};
struct List {/*определение структуры List */}; 
Это позволяет создавать связные списки структур.

Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:
struct{ 
char fio[30]; 
int date, code; 
double salary; 
}worker = {"Ляшенко", 31, 215, 3400.55}; 
При инициализации массивов структур следует заключать в фигурные скобки каждый элемент массива (учитывая, что многомерный массив — это массив мас­сивов):
struct complex{ 
float real, im; 
} compl [2][3] = { 
{{1,1}, {1,1}, {1,1}}, //строка 1 - массив compl[0] 
{{2,2}, {2,2}, {2,2}} //строка 2 - массив compl[1] 
,..}; 
Важно:
1) Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование.
2) Структуру можно передавать в функцию и возвращать в качестве значения функции.

Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель.

Пример:
Worker worker, staff[100], *ps;
...
worker.fio = "Ляшенко"; 
staff[8].code = 215; 
ps->salary = 0.12;
* Если элемент структуры - другая структура, то доступ к элементам через две операции выбора (две точки):
struct А {int а; double х;}; 
struct В {А а; double х;} х[2]; 
х[0].а.а = 1; 
х[1].х = 0.1;
Онлайн всего: 3
Гостей: 3
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте