Завдання 16 Дедлайн 15 січня

в
  1. Поясніть різницю між класом і структурою. Коли потрібно оголошувати тип як class, а коли — як struct?
  2. Чи можна робити виклик delete this в методах класу? Який наслідок такого виклику в деструкторі?
  3. Наведіть приклад, коли можна використати вказівник на поле класу.
  4. Що таке mutable і коли його потрібно використовувати?

Відповідь:

1. Поясніть різницю між класом і структурою. Коли потрібно оголошувати тип як class, а коли — як struct?

Різниця між класом і структурою - у специфікаторах доступу за замовчуванням. Для struct це public, для class - private. Більше ніякої різниці між ними в C++ немає.
Оскільки вони практично ідентичні, то немає різниці яке ключове слово використовувати. Тим не менш, для типів, які є суто комбінацією даних і не передбачають інкапсуляції і дають прямий доступ до полів, варто використовувати struct (піксель, точка, лінія). Там, де логіка більш складна, - class (база даних, фізичний пристрій).

2. Чи можна робити виклик delete this в методах класу? Який наслідок такого виклику в деструкторі?

Можна, якщо цей об'єкт був виділений динамічно, інакше скоріш за все призведе до вильоту програми. В деструкторі такий виклик призведе до вильоту через переповнення стеку, бо деструктор рекурсивно викликатиме сам себе.

3. Наведіть приклад, коли можна використати вказівник на поле класу.

Нехай є масив об'єктів, наприклад, учнів. Кожен учень представлений структурою з двома поялми - унікальний номер та середній бал. Відсортувати їх можна як по номеру, так і по сердьному балу. Функція сортування може приймати вказівник на поле і порівнювати два об'єкт по цьому полю. Подібний функціонал сортування за різними атрибутами (полями) можна бачити у файловому браузері.

4. Що таке mutable і коли його потрібно використовувати?

mutable це специфікатор поля в класах і структурах, який вказує, що дане поле можна міняти навіть у const об'єктах. Його допустиме використання - виклик const метода, який не змінює стан об'єкта з точки зору користувача. Подібна ситуація може виникнути в класах, які є потокобезпечними. Щоб це гарантувати, вони використовують недоступні користувачу mutable поля, значення яких тимчасово змінюється під час виклику більшості методів.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Максимальный размер загружаемого файла: 1 ГБ. Вы можете загрузить: изображение, аудио, видео, документ, таблица, интерактив, текст, архив, код, другое. Ссылки на YouTube, Facebook, Twitter и другие сервисы, вставленные в текст комментария, будут автоматически встроены. Перетащите файл сюда