Різниця між класом і структурою

Перш ніж зрозуміти різницю між класом і структурою, ми повинні знати кілька основних понять, пов'язаних з ними. Без розуміння понять важко зрозуміти відмінності між ними.

Що таке клас та об’єкт:

Це дві важливі концепції, пов’язані з об'єктно-орієнтованим програмуванням, і вони складають основу для обрамлення функцій та передачі даних до інших функцій. Для кращого розуміння ми можемо співвіднести це із прикладом реального життя. Клас можна розглядати як магазин, а Об'єктом може бути будь-який з окремих, конкретних магазинів, таких як продуктові товари, канцтовари, фрукти тощо. Усі об'єкти мають спільні властивості основного класу - магазину -, і, в свою чергу, об’єкти можуть мати власні ексклюзивні властивості, такі як конкретна конструкція, освітлення тощо. Через об'єкти ми можемо реально використовувати клас; вони утворюють екземпляри класу.

Синтаксис класу

Класний магазин

громадські струнні речі;

громадська струнна конструкція;

Синтаксис об’єкта

Магазин продуктових товарів = новий магазин ();

Магазин канцтоварів = новий магазин ();

Що таке структура?

Структура включає лише дані, і тому корисно формувати окремі вимоги до даних за допомогою об'єктів Struct. На відміну від класу, йому не вистачає функцій. Ось його синтаксис:

struct grocery_entrance

char entry_name [50];

int entry_size;

бакалійний_нахід;

Усі магазини можуть використовувати «вхід» Struct з окремими назвами та розмірами.

Що таке спадщина?

Це схоже на те, як син успадковує володіння свого батька, і, в свою чергу, син також може додавати деякі власні володіння. Клас може бути або базовим класом, або похідним класом, у якому перший може бути прийнятий за основу для формування останнього. Похідний клас додає мало інших властивостей для себе, крім того, що він отримує від базового класу. Якщо ми розглянемо наведений вище приклад, продуктовий магазин все ще може бути відведений до конкретного продуктового магазину, такого як продуктовий магазин XYZ.

Тепер, коли ми знайомі з основними поняттями, ми можемо перейти до фактичної різниці між класом та структурою.

Як вони відрізняються?

  • Повторне використання: Оскільки класи складають основні рамки, їх можна повторно використовувати; Однак структури - це окремі елементи із специфічними властивостями, тому їх не можна повторно використовувати. Наприклад, продуктовий магазин Class може використовуватися для будь-якого виду продуктових магазинів, але Struct grocery_entrance є специфічним лише для цього, і немає сенсу повторно використовувати його в інших класах.
  • Видимість: Усі функції класу є загальнодоступними для його Об'єктів. Наприклад, у нас є функція під назвою "речі" під класом "Магазин". Функція "речі" є видимою для всіх її об'єктів, таких як "продуктовий магазин," канцелярський магазин "тощо. Така видимість неможлива для структур, оскільки дані структури обмежені собою і не відображаються для інших структур. Щоб зрозуміти, можна сказати, що дані "grocery_entrance" публічно не відображаються у всіх інших магазинах.
  • Перейти по довідці та пройти за вартістю: Передати посилання - це відправлення функцій лише в пам'ять, а не фактичні дані. Це означає, що щоразу, коли значення змінюється, зміна відображається у відповідних функціях. Передача за значенням, у свою чергу, просто передає значення функції. У цьому випадку зміна значення після його надсилання не відображатиметься у функції. Клас використовує пропуск за посиланням, а Struct використовує значення пропуску.
  • Спадщина: Класи можуть бути успадковані для формування підкласів, але структури не можуть використовувати успадкування. Наприклад, Клас Магазин надає свої функції підкласу "продуктовий магазин". Але структура "grocery_entrance" не може успадкувати жодну функцію. Можна сказати, що немає такої концепції, як підструктура.
  • Видимість за замовчуванням: Усі члени Класу за замовчуванням зберігаються як приватні особи, тоді як члени Структу за замовчуванням зберігаються як публічні особи.
  • Розмір порожнього класу та структури: Клас використовує розмір 1 байт, навіть коли він порожній, тоді як Struct ніколи не використовує жодної пам'яті, коли він порожній. Це означає, що можна сказати, що розмір порожньої структури дорівнює 0 Байтам.
  • Збір сміття: Збір сміття можливий за допомогою класів, оскільки вони використовують пропуск за посиланням. Тому простіше зробити очищення в одному місці, де зберігаються дані. З іншого боку, збирання сміття за допомогою Struct неможливе, оскільки воно використовує пропускне значення і дані розкидаються в різних місцях.
  • Управління пам'яттю: Оскільки клас дозволяє збирати сміття, управління пам’яттю також ефективно; однак це не так ефективно зі структурами.
  • Конструктор: Конструктор зазвичай ініціалізує клас з певними заданими значеннями. Ми можемо розглядати це як щось, що було ініціалізовано зі значеннями. Якщо потрібно створити новий клас, конструктор викликається, щоб виділити пам'ять для цього примірника. Ми навіть можемо передавати значення як аргументи під час виклику конструктора. Давайте зараз прийдемо до нашого актуального обговорення. Класи дозволяють конструкторам усіх типів, наприклад, з аргументами або без них, тоді як структури дозволяють конструкторам лише аргументи, тобто параметризовані конструктори.
  • Деструктор: Деструктор викликається, коли нам потрібно видалити екземпляр класу. Деструктор, у свою чергу, видаляє цей екземпляр і звільняє пам'ять. Клас може використовувати деструктор, тоді як Структура не може.
  • Ініціалізація змінних учасників: У Класах ми можемо ініціалізувати змінні члена безпосередньо; така ініціалізація зі структурами неможлива.
  • Створення об'єкта: Загальний синтаксис створення об'єктів у класах:

Demo obj = новий Demo ();

Це означає, що ми повинні використовувати ключове слово "new" під час створення об'єктів класу. Це не потрібно при створенні об'єктів Structs. Просто погляньте на їх синтаксис:

Demo obj;

Це чудово працює навіть без ключового слова "new".

Коли використовувати клас та коли використовувати структуру?

Оскільки класи більш гнучкі в передачі даних та функцій разом, ми можемо використовувати це, коли використовувані об'єкти є складними та великими. У нашому прикладі Mall може використовувати клас "store" для кращого вираження системи. Однак структури обмежуються лише меншими об'єктами, оскільки вони порівняно менш ефективні, ніж класи. Тому, якщо ви проектуєте власний магазин, Structs - кращий вибір.

Як перетворити структуру в клас та віце-верса?

Можливо, ви чули терміни "бокс" і "розпакування" для перетворення структури в клас, і навпаки. Хоча це ефективні процеси, які допомагають нам у перетворенні, з ними слід поводитися обережно. Оскільки це безпосередньо впливає на місця пам'яті, це робить величезний вплив на продуктивність нашої системи. Більше того, це впливає на процеси вивезення сміття та призводить до загальної неефективності системи. Тому використовуйте ці перетворення лише в разі потреби.

Давайте розглянемо вищезазначені відмінності в табличній формі.

S.No Поняття Відмінності
Клас Структуру
1 Повторне використання Повністю повторно використаний Не можна використовувати повторно
2 Видимість Усі функції класу видно його об'єктам Дані Об'єкта Структури не є видимими для інших об'єктів тієї самої Структури
3 Пройти по довідці та пройти за вартістю Використання пройти по довідці Використання проходить за вартістю
4 Спадщина Функції класу можуть бути успадковані за його підкласами; дозволяє успадкування Ніколи не допускає спадкування
5 Видимість за замовчуванням Усі члени класу за замовчуванням приватні Усі члени Структу за замовчуванням є загальнодоступними
6 Розмір, коли порожній Розмір порожнього класу - 1 байт Розмір порожньої структури - 0 байт
7 Збір сміття Оскільки він використовує пропускний код, збирання сміття можливе Оскільки він використовує пропускне значення, збирання сміття неможливе
8 Управління пам'яттю Простота процесу вивезення сміття допомагає ефективному керуванню пам’яттю Відсутність сміття призводить до поганого управління пам’яттю
9 Конструктори Дозволяє конструкторам усіх типів, наприклад, з параметрами або без них Дозволяє лише параметризовані конструктори
10 Деструктори Можна використовувати Неможливо використовувати його
11 Ініціалізація змінних учасників Дозволяє пряму ініціалізацію змінних членів Не дозволяє пряму ініціалізацію слів змінних членів
12 Створення об'єкта Під час створення об'єкта обов'язково потрібно використовувати ключове слово "new" Необов’язково використовувати ключове слово "new" під час створення об'єкта
13 Коли використовувати? Краще для більших і складних об'єктів, де потрібно успадкування Краще для менших і простіших об'єктів, де успадкування має менше значення.

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