Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Лекция 12.12.22
- Company myCompany
- myCompany.CEO.salary = 10000;
- Company myCompany = {{ 3, 35, 55000.o0f}, 7};
- /*
- РАЗМЕР СТРУКТУР
- Размер структуры - сумма размеров всех ее полей. Например, размер структуры сотрудник - 14 байт. Для того чтобы узнать размер структуры, используется оператор sizeof().
- МАССИВЫ СТРУКТУР
- Наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить сруктуру, а затем объявить массив переменных данного типа. Например:
- */
- Employee e[100];
- Employee* e = new Employee[n];
- for(int i = 0; i < 100; i++)
- {
- cin >> e[i].id;
- cin >> e[i].age;
- cin >> e[i].salary;
- }
- /*
- Указатели на структуру определяются также как и указатели на другие типы. Например:
- */
- Employee *pe;
- /*
- Можно объявить указатель для структуры, не имеющей имени
- */
- Employeee *pe;
- struct
- {
- short id;
- int age;
- double salary;} *person;
- /*
- При определении указатель на структуру может быть сразу проинициализироован. Указатель на структуру обеспечивает доступ к ее полям двумя способами.
- */
- cin >> (*pe).id;
- cin >> pe->age;
- /*
- МЕТОДЫ В СТРУКТУРАХ
- Рассмотрим реализацию даты с использованием структуры, для того чтобы определить представление понятия даты и функций для работы с датой.
- */
- struct date
- {
- int month;
- int day;
- int year;
- };
- void set_date(date *f, int d, int m, int y)
- {
- f -> day = d;
- f -> month = m;
- f -> year = y;
- }
- void print_date(date* f)
- {
- cout << f -> day << " " << f -> month << " " << f -> year;
- }
- /*
- Операция взятия адреса
- */
- int main()
- {
- date today;
- set_date(&today, 12, 12, 2022);
- print_date(&today);
- return 0;
- }
- /* Никакой явной связи между функцией и типов данных в этом примере нет. Для вызова любой из описанных функций требуется в качестве аргумента передать указатель на экземпляр структуры.
- Такую связь можно установить, описав функции как члены структуры. Эти функции могут действовать на данные, содержащиеся в самой структуре.
- */
- struct date
- {
- int month;
- int day;
- int year;
- void set_date(int d, int m, int y)
- {
- day = d; month = m; year = y;
- }
- void print_date();
- };
- void date::print_date()
- {
- cout << day << " " << month << " " << year;
- }
- int main()
- {
- date today;
- today.set_date(12, 12, 2022);
- today.print_date();
- return 0;
- }
- /* РАЗЛИЧИЯ МЕЖДУ СТРУКТУРАМИ И КЛАССАМИ
- Члены класса по умолчанию являются приватными, а члены структуры по умолчанию публичными. Можно описать шаблон класса, но не структуры.
- */
- /* БИТОВЫЕ ПОЛЯ
- Битовые поля - особый вид полей структуры. При описании битового поля указывается его длина в битах(целая положительная константа). Синтаксически битовое поле в структуре определяется следующим образом:
- */
- struct Ex
- {
- unsigned short first : 2;
- unsigned short second : 2;
- unsigned short third : 4;
- };
- /* В примере описана структура, переменные которой будут занимать 8 бит(1 байт). Если в эту структуру дописать еще одно поле
- */
- struct Ex
- {
- unsigned short first : 2;
- unsigned short second : 2;
- unsigned short third : 4;
- unsigned short fifth : 5;
- };
- /*
- То будет уже задействовано два байта и во втором байте 3 бита будут не востребованы(мусор). Поэтому, при описании битовых полей следует учитывать выравнивание до байта т.е. распределять переменные так, чтобы каждый бит был востребован. Для этого используются не именованные битовые поля.
- */
- struct Ex
- {
- unsigned short first : 2;
- unsigned short second : 2;
- unsigned short third : 4;
- unsigned short : 3;
- unsigned short fifth : 5;
- };
- /*
- ПРИЧИНЫ ИСПОЛЬЗОВАНИЯ БИТОВЫХ ПОЛЕЙ
- 1. Если ограничено место для хранения инфорамции, то можно сохранить несколько логических перемнных в одном байте.
- 2. Некоторые интерфейсы устройств передают информацию закодировав биты в один байт.
- 3. Некоторым процедурам кодирования необходимо получать доступ к отдельным битам в байте.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement