Advertisement
Technoblade777

Лекция ОП 12.12.22

Dec 12th, 2022
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.71 KB | None | 0 0
  1. // Лекция 12.12.22
  2. Company myCompany
  3. myCompany.CEO.salary = 10000;
  4. Company myCompany = {{ 3, 35, 55000.o0f}, 7};
  5. /*
  6.     РАЗМЕР СТРУКТУР
  7.     Размер структуры - сумма размеров всех ее полей. Например, размер структуры сотрудник - 14 байт. Для того чтобы узнать размер структуры, используется оператор sizeof().
  8.     МАССИВЫ СТРУКТУР
  9.     Наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить сруктуру, а затем объявить массив переменных данного типа. Например:
  10. */
  11. Employee e[100];
  12. Employee* e = new Employee[n];
  13.  
  14. for(int i = 0; i < 100; i++)
  15. {
  16.     cin >> e[i].id;
  17.     cin >> e[i].age;
  18.     cin >> e[i].salary;
  19. }
  20. /*
  21.     Указатели на структуру определяются также как и указатели на другие типы. Например:
  22. */
  23. Employee *pe;
  24. /*
  25.     Можно объявить указатель для структуры, не имеющей имени
  26. */
  27. Employeee *pe;
  28.  
  29. struct
  30. {
  31.     short id;
  32.     int age;
  33.     double salary;} *person;
  34. /*
  35.     При определении указатель на структуру может быть сразу проинициализироован. Указатель на структуру обеспечивает доступ к ее полям двумя способами.
  36. */
  37. cin >> (*pe).id;
  38. cin >> pe->age;
  39. /*
  40.     МЕТОДЫ В СТРУКТУРАХ
  41.     Рассмотрим реализацию даты с использованием структуры, для того чтобы определить представление понятия даты и функций для работы с датой.
  42. */
  43. struct date
  44. {
  45.     int month;
  46.     int day;
  47.     int year;
  48. };
  49. void set_date(date *f, int d, int m, int y)
  50. {
  51.     f -> day = d;
  52.     f -> month = m;
  53.     f -> year = y;
  54. }
  55. void print_date(date* f)
  56. {
  57.     cout << f -> day << " " << f -> month << " " << f -> year;
  58. }
  59. /*
  60.     Операция взятия адреса
  61. */
  62. int main()
  63. {
  64.     date today;
  65.     set_date(&today, 12, 12, 2022);
  66.     print_date(&today);
  67. return 0;  
  68. }
  69. /*  Никакой явной связи между функцией и типов данных в этом примере нет. Для вызова любой из описанных функций требуется в качестве аргумента передать указатель на экземпляр структуры.
  70. Такую связь можно установить, описав функции как члены структуры. Эти функции могут действовать на данные, содержащиеся в самой структуре.
  71. */
  72. struct date
  73. {
  74.     int month;
  75.     int day;
  76.     int year;
  77.     void set_date(int d, int m, int y)
  78.     {
  79.         day = d; month = m; year = y;
  80.     }
  81.     void print_date();
  82. };
  83. void date::print_date()
  84. {
  85.     cout << day << " " << month << " " << year;
  86. }
  87.  
  88. int main()
  89. {
  90.     date today;
  91.     today.set_date(12, 12, 2022);
  92.     today.print_date();
  93. return 0;
  94. }
  95.  
  96. /*  РАЗЛИЧИЯ МЕЖДУ СТРУКТУРАМИ И КЛАССАМИ
  97.     Члены класса по умолчанию являются приватными, а члены структуры по умолчанию публичными. Можно описать шаблон класса, но не структуры.
  98. */
  99. /*  БИТОВЫЕ ПОЛЯ
  100.     Битовые поля - особый вид полей структуры. При описании битового поля указывается его длина в битах(целая положительная константа). Синтаксически битовое поле в структуре определяется следующим образом:
  101. */
  102. struct Ex
  103. {
  104. unsigned short first : 2;
  105. unsigned short second : 2;
  106. unsigned short third : 4;
  107.  
  108.  
  109.  
  110. };
  111. /*  В примере описана структура, переменные которой будут занимать 8 бит(1 байт). Если в эту структуру дописать еще одно поле
  112. */
  113. struct Ex
  114. {
  115. unsigned short first : 2;
  116. unsigned short second : 2;
  117. unsigned short third : 4;
  118.  
  119. unsigned short fifth : 5;
  120.  
  121. };
  122. /*
  123.     То будет уже задействовано два байта и во втором байте 3 бита будут не востребованы(мусор). Поэтому, при описании битовых полей следует учитывать выравнивание до байта т.е. распределять переменные так, чтобы каждый бит был востребован. Для этого используются не именованные битовые поля.
  124. */
  125. struct Ex
  126. {
  127. unsigned short first : 2;
  128. unsigned short second : 2;
  129. unsigned short third : 4;
  130. unsigned short       : 3;
  131. unsigned short fifth : 5;
  132.  
  133. };
  134. /*
  135.     ПРИЧИНЫ ИСПОЛЬЗОВАНИЯ БИТОВЫХ ПОЛЕЙ
  136.     1. Если ограничено место для хранения инфорамции, то можно сохранить несколько логических перемнных в одном байте.
  137.     2. Некоторые интерфейсы устройств передают информацию закодировав биты в один байт.
  138.     3. Некоторым процедурам кодирования необходимо получать доступ к отдельным битам в байте.
  139. */
  140.  
  141.  
  142.  
  143.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement