Similar presentations:
Информационные технологии. Часть 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]