1. Модуль 2: Составные типы данных и работа с динамической
памятью.
Темы лекции: Пользовательские типы данных.
Практическое задание: Пользовательские типы данных.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 6
2. http://www.slideshare.net/IgorShkulipa 2
Структуры (struct)
Структура — это составной тип данных, который состоит из элементов
разных типов. Объявление структуры следует рассматривать как
объявление типа.
struct FullName
{
char* Name;
char* Surname;
char* MiddleName;
};
struct PersoneInfo
{
FullName PersoneName;
Date BirthDate;
int Age;
int Height;
int Weight;
};
struct Date
{
int Day;
int Month;
int Year;
};
3. http://www.slideshare.net/IgorShkulipa 3
Инициализация структуры
Инициализация структуры похожа на инициализацию массива.
FullName perName={“Petr”,”Petrov”,”Petrovich”};
Date bDate={1,1,1991};
Порядок данных в фигурных скобках должен соответствовать порядку
объявления полей структуры.
PersoneInfo persone={perName,bDate,22,180,80};
PersoneInfo persone={perName,{1,1,2001},12,150,50};
PersoneInfo persone={{"Ivan","Ivanov","Ivanovich"},{1,1,2001},12,150,50};
4. http://www.slideshare.net/IgorShkulipa 4
Доступ к полям структуры
Доступ к полям структуры осуществляется по имени переменной структуры с
помощью операции прямого выбора.
<имя_переменной>.<имя_поля>
Date bDate;
bDate.Year=2013;
bDate.Month=1;
bDate.Day=1;
Если структура объявлена, как динамическая переменная, то используется
операция косвенного выбора или операция прямого выбора с разыменованием.
<имя_переменной>-><имя_поля>
(*<имя_переменной>).<имя_поля>
FullName* perName=new FullName;
perName->Name=“Sidor”;
perName->MiddleName=“Sidorovich”;
(*perName).Surname=“Sidorov”;
5. http://www.slideshare.net/IgorShkulipa 5
Перечисления (enum)
Перечисления - это ещё один пользовательский тип данных.
Перечисления используют для описания какого-то небольшого
множества значений.
enum WeekDays {Monday, Tuesday, Wednesday, Thursday, Friday,
Saturday, Sunday};
После того, как определено перечисление, можно создавать переменные
нового типа
WeekDays wd = Monday;
6. http://www.slideshare.net/IgorShkulipa 6
Перечисления (enum)
Переменные типа WeekDays могут принимать только семь значений:
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday.
Кроме того, элементы в перечислении нумеруются от нуля. Т.е.
Monday=0, Tuesday=1, Wednesday=2, Thursday=3, Friday=4,
Saturday=5, Sunday=6.
Вместо перечисления, можно было создать семь констант:
const int Monday=0; const int Tuesday=1; const int Wednesday=2;
const int Thursday=3; const int Friday=4; const int Saturday=5;
const int Sunday=6;
Но это можно изменить. Если мы переопределим какой-либо элемент
значением 10, то следующий, получит значение 11 и т.д. Можно так
же переопределить все четыре значения.
enum WeekDays {Monday=10, Tuesday=15, Wednesday=16, Thursday,
Friday, Saturday, Sunday};
8. http://www.slideshare.net/IgorShkulipa 8
Поля битов
Поля битов — это специальный тип полей структуры.
Формат определения размера переменной в битах следующий:
<тип> <имя_поля>:<длина_в_битах>;
struct Point
{
int x : 3;
int y : 4;
int z : 5;
};
Поле x y z
Биты 0 1 2 3 4 5 6 7 8 9 10 11
9. http://www.slideshare.net/IgorShkulipa 9
Лабораторная работа №6
Создать базу данных книг, которая содержит следующую информацию о
книгах: автор, наименование, издательство, год издания, количество
страниц.
⚫ Вывести на экран перечень годов изданий с указанием числа
книг, выпущенных в эти годы.
⚫ Отсортировать и вывести на экран книги в алфавитном порядке
авторов.
⚫ Отсортировать и вывести на экран книги, изданные с год1 по
год2. Год1 и год2 ввести с клавиатуры.