1.28M
Category: programmingprogramming

Информационные технологии. Часть 2. Тема 3. Структуры и перечисления

1.

Санкт-Петербургский государственный
архитектурно-строительный университет
кафедра информационных технологий
Информационные технологии. Часть 2
Тема 3
Структуры и перечисления
Букунов Сергей Витальевич
к.т.н., доцент, доцент

2.

Структуры

3.

Структуры
Структуры – это специальный тип данных С++, предназначенный
для объединения данных разного типа.
Переменные, входящие в состав структуры, называются полями
структуры.
Полями структуры могут быть как переменные любого
стандартного типа, так и данные пользовательского типа например,
другие структурные переменные.
Замечание. Именно разнородностью типов переменных структуры
отличаются от массивов, в которых все переменные должны иметь
одинаковый вид.

4.

Структуры

5.

Объявление структуры
Объявление структуры аналогично созданию нового типа данных.
Объявление структуры, как правило, делают вне функции main(). В
этом случае любая структурная переменная представляет собой
глобальную переменную и видна в любом месте программы, в т.ч.
и в других функциях.
Синтаксис объявления структуры следующий:
объявление структуры начинается с ключевого слова struct;
затем следует имя структуры;
затем в фигурных скобках через точку с запятой перечисляются
поля структуры с указанием типа данных для каждого поля;
после завершающей фигурной скобки следует точка с запятой –
символ, означающий конец объявления структуры.

6.

Структуры vs Cтандартный тип данных
Объявление структурной переменной похоже на объявление
обычной переменной стандартного типа:
phone phone1; // Объявление переменной phone1 типа phone
int var1; // Объявление переменной var1 типа int
Объявление структуры не создает никаких переменных; другими
словами, при этом не происходит ни выделения физической
памяти, ни объявления переменной.
В то же время объявление обычной переменной предполагает
выделение памяти под нее.
Таким образом, объявление структуры фактически задает
внутреннюю организацию структурных переменных после того,
как они будут определены.

7.

Объявление структурной переменной
Объявление структурной переменной
объявлением самой структуры.
можно
совместить
с

8.

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

9.

Операции с полями структурных переменных

10.

Инициализация полей структурной переменной
Для инициализации полей структурной переменной
использовать способ инициализации массивов.
можно

11.

Операции со структурными переменными
Поскольку структурные переменные представляют собой данные
нестандартного
типа,
практически
все
стандартные
арифметические операции к ним не применимы.
Исключение составляет операция присваивания.

12.

Операции со структурными переменными
Операция присваивания может быть выполнена только над
структурными переменными одного и того же типа.
При попытке выполнить операцию присваивания над переменными
разных типов компилятор выдаст сообщение об ошибке.

13.

Операции со структурными переменными

14.

Передача структурных переменных в функцию
Передача в функцию структурных переменных аналогична
передаче в функцию переменных стандартных типов (int, char,
float и др.).

15.

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

16.

Возврат структурных переменных из функции

17.

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

18.

Вложенные структуры

19.

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

20.

Перечисления
Перечисления – это еще один способ создания данных
пользовательского типа в С++.
Перечисления используются в тех случаях, когда переменные
создаваемого типа могут принимать заранее известное конечное (и,
как правило, небольшое) множество значений.

21.

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

22.

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

23.

Перечисления
Перечисляемые типы данных, в отличие от структур, допускают
применение основных арифметических операций, а также
операций сравнения.
Это связано с тем, что внутренне перечисляемые типы данных
представляют собой целые числа. Т.е. фактически первое значение
в списке рассматривается как число 0, второе – как число 1 и т.д.
Для того, чтобы изменить значение, с которого начинается
нумерация, можно с помощью операции присваивания задать это
значение первой из перечисляемых констант, например
enum days_of_week {Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat};
В этом случае следующим по списку константам будут
соответствовать числа 2, 3, … , 7.

24.

Перечисления
Замечание. Использование арифметических операций и операций
отношения с перечисляемыми типами данных, как правило не несет
большой смысловой нагрузки.
Пример. Если определить тип данных pets, хранящий названия
домашних животных, следующим образом:
enum pets {cat, dog, hamster, canary, ocelot};
то смысл выражений dog + cat или (cat <= canary) и т.п. не ясен.
Замечание. Важным недостатком перечисляемых типов данных является
то, что они не распознаются средствами ввода/вывода С++.
Пример. Результатом работы оператора
cout << day2;
будет вывод на экран целого числа 4, являющегося внутренним
представлением переменной day2,
а не слова Thu, формально
являющегося значением переменной day2.

25.

Примеры перечислений
Наиболее часто используемые перечисляемые типы данных:
enum months {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov,
Dec}; //месяцы года
enum direction {north, south, east, west}; //стороны света
enum switch {off, on}; //переключатель
enum meridian {am, pm}; //меридиан
enum chess {pawn, knight, bishop, rook, queen, king}; //шахматные
фигуры
enum answer {no, yes}; //варианты ответов

26.

Санкт-Петербургский государственный
архитектурно-строительный университет
кафедра информационных технологий
Автор:
Букунов Сергей Витальевич
[email protected]
English     Русский Rules