Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_С++_ч_1.doc
Скачиваний:
15
Добавлен:
22.11.2018
Размер:
324.61 Кб
Скачать

Типы данных, определенные пользователем

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

Переименование типов

Типу можно задать новое имя с помощью ключевого слова typedef:

typedef тип новое_имя [размерность];

Примеры

typedef unsigned int UINT;

typedef char Msg [100];

Введенное таким образом имя можно использовать так же, как и стандартное:

UINT i, j;

Msg str [10];

Перечисления

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

enum [имя_типа] {список констант};

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

Пример

enum digit {one = 1, two = 2, three = 3};

enum Err {ERR_READ, ERR_WRITE, ERR_CONVERT};

Err error;

digit dig;

Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются (автоматически) значения 0, 1, 2 соответственно.

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

Структуры

Структура может содержать элементы различных типов:

struct [имя_типа] {

тип_1 элемент_1;

тип_2 элемент_2;

тип_n элемент_n;

} [список описателей];

Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры.

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

Пример

struct {

char fio [30];

int date, code;

double salary;

} stuff [100], *ps; // определение массива структур и указателя на структуру

Пример

struct Worker {

char fio [30];

int date, code;

double salary;

}; // описание типа Worker

Worker staff [100], *ps; // описание массива и указателя типа Worker

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

struct {

char fio [30];

int date, code;

double salary;

} worker = {"Иванов", 31, 215, 3400.50};

При инициализации массивов структур следует заключать в фигурные скобки каждый элемент массива.

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

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

Worker staff [100], worker;

strcpy(worker.fio,”Ivanov”); // используем функцию копирования строки

// из библиотеки C (<string.h>) для передачи значения в строковое поле

stuff[1].code = 215;

Worker *ps = new Worker; // Задание указателя типа Worker

ps ->salary = 1200.12; // Вариант (*ps).salary = 1200.12;

Задание

Написать программу, позволяющую ввести в память следующую информацию о сотрудниках организации (объем списка задает пользователь) :

(ФИО, должность, возраст) и выполняющую поиск сотрудников по заданной должности или возрасту.