Слайд 2Структуры
Структура – это множество поименованных элементов в общем случае разных типов.
Объявление типа
![Структуры Структура – это множество поименованных элементов в общем случае разных типов.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-1.jpg)
struct имеет вид:
struct имя_типа {описание элементов};
Элементы структуры называются полями, могут иметь любой тип, в том числе быть указателями на тип самой структуры.
Слайд 3Поля структуры
Имена полей в структуре должны различаться.
Имена элементов разных структур могут
![Поля структуры Имена полей в структуре должны различаться. Имена элементов разных структур](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-2.jpg)
совпадать.
Элементом структуры может быть другая структура.
struct pets { char name[10];
int age };
struct boy { char name[10];
int age;
pets pet };
Слайд 4В языке С++
Тип struct является видом класса и обладает всеми свойствами классов.
![В языке С++ Тип struct является видом класса и обладает всеми свойствами](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-3.jpg)
Все поля класса struct по умолчанию открыты (public), но их можно переопределить как закрытые (private).
Слайд 5Объявление переменных
Следующий оператор:
struct book library;
создает объект типа struct book, под который
![Объявление переменных Следующий оператор: struct book library; создает объект типа struct book,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-4.jpg)
выделяется 110 байт памяти в соответствии со структурным шаблоном.
Используя тип struct book, можно описать несколько объектов:
struct book library, catalog[10], *plibrary;
Слайд 6Объявление переменных
Можно объединить описание структурного шаблона и фактическое определение структурной переменной:
struct book
![Объявление переменных Можно объединить описание структурного шаблона и фактическое определение структурной переменной:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-5.jpg)
{ char title[81];
int year;
int page;
float price;
} library;
Слайд 7Инициализация и доступ
Структурную переменную можно инициализировать в операторе описания подобно массиву:
struct book
![Инициализация и доступ Структурную переменную можно инициализировать в операторе описания подобно массиву:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-6.jpg)
library = { “Язык С++”, “Страуструп”, 1990, 500, 1000 };
Доступ к элементам структуры осуществляется с помощью операции точка:
library.author=”Павловская”; // явная инициализация
gets (library.author); //ввод значения
Слайд 8Массивы структур
Описание массива структур аналогично описанию любого другого массива:
struct book catalog[10];
Каждый
![Массивы структур Описание массива структур аналогично описанию любого другого массива: struct book](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-7.jpg)
элемент массива catalog представляет собой структуру типа book.
Для доступа к элементу массива используется индекс, который присоединяется к имени массива:
catalog[2].title
catalog[4].price
catalog[2].title[5] //6 элемент символьного массива
в 3-й структуре
Слайд 9Списки структур
Элемент структуры может быть объявлен как указатель на тип структуры, в
![Списки структур Элемент структуры может быть объявлен как указатель на тип структуры,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-8.jpg)
которую он входит. Это позволяет создавать связанные списки структур:
struct sample
{ char c;
float f;
struct sample *next; } x;
Присвоим переменной x.next адрес динамически выделенной области памяти для хранения значения структуры того же типа:
x.next = (struct sample*) malloc (sizeof (x));
Слайд 10Вложенные структуры
Элементом структуры может быть другая структура.
struct myfile { char name[10];
char
![Вложенные структуры Элементом структуры может быть другая структура. struct myfile { char](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-9.jpg)
ftype[4];
int ver; };
struct dir { struct myfile f;
int size; } my_f [100];
Шаблон для вложенной структуры должен располагаться перед определением фактической структурной переменной в рамках другой структуры.
my_f [0].size //элемент size 1-ой структуры
my_f [2].f.ver //элемент ver вложенной структуры f в 3-й структуре my_f
Слайд 11Указатели на структуры
Объявим указатель на структуру:
struct dir *pst;
Указатель *pst можно использовать для
![Указатели на структуры Объявим указатель на структуру: struct dir *pst; Указатель *pst](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-10.jpg)
ссылок на любые структуры типа dir:
pst = &my_f [0];
Слайд 12Указатели на структуры
Доступ к полям структуры через указатель осуществляется с помощью операции
![Указатели на структуры Доступ к полям структуры через указатель осуществляется с помощью](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-11.jpg)
косвенного доступа
pst->size ≡ my_f [0].size
(pst+i)->size ≡ my_f [i].size
Для вложенных структур:
my_f [0].f.ver ≡ pst (f.ver)
my_f [0].f.name[0] ≡ pst (f.name[0])
Слайд 13Структуры и функции
Для передачи информации о структуре внутрь функции используются следующие способы:
Использование
![Структуры и функции Для передачи информации о структуре внутрь функции используются следующие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-12.jpg)
в качестве фактического аргумента элемента структуры.
Использование в качестве фактического аргумента адреса структуры.
Использование в качестве фактического аргумента самой структуры.
Слайд 14Перечисления в C++
Перечисление - это тип данных, который описывает набор именованных целочисленных
![Перечисления в C++ Перечисление - это тип данных, который описывает набор именованных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-13.jpg)
констант.
Переменным перечислимого типа можно присваивать только именованные значения перечислимых констант.
Целочисленным переменным можно присваивать значения перечислимых констант.
Применение перечислений делает программы нагляднее.
Слайд 15Объявление перечислимого типа:
enum color {red, green, black}; // вариант 1
const int
![Объявление перечислимого типа: enum color {red, green, black}; // вариант 1 const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-14.jpg)
red = 0;
const int green = 1;
const int black = 2;
enum color
{ red = 2, green = 2, black = 6 }; // вариант 2
Слайд 16Объявление переменной перечислимого типа:
enum color с;
color d;
enum color
![Объявление переменной перечислимого типа: enum color с; color d; enum color {red,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1130471/slide-15.jpg)
{red, green, black} a;
enum color c = red;
int i = red;