Разница между классом и структурой

Прежде чем мы поймем разницу между классом и структурой, мы должны знать несколько основных понятий, связанных с ними. Без понимания концепций трудно понять различия между двумя.

Что такое класс и объект:

Это две важные концепции, связанные с объектно-ориентированным программированием, и они составляют основу для формирования функций и передачи данных другим функциям. Для лучшего понимания мы можем соотнести его с реальным примером. Класс можно рассматривать как хранилище, а Объектом может быть любое из отдельных, конкретных магазинов, таких как продуктовые, канцелярские товары, фрукты и т. Д. Все объекты имеют общие свойства основного класса - магазина - и, в свою очередь, объекты могут иметь свои собственные эксклюзивные свойства, такие как определенный дизайн, освещение и т. д. Через объекты мы можем фактически использовать класс; они образуют экземпляры класса.

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

Class Store

общедоступные струнные вещи;

публичный струнный дизайн;

Синтаксис объекта

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

Store Stationery = новый магазин ();

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

Struct включает в себя только данные, и поэтому он полезен при формировании индивидуальных требований к данным с помощью объектов Struct. В отличие от класса, ему не хватает функций. Вот его синтаксис:

struct grocery_entrance

char entry_name [50];

int entry_size;

grocery_entrance;

Все магазины могут использовать вход «Struct» с индивидуальными именами и размерами..

Что такое наследование?

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

Теперь, когда мы знакомы с основными понятиями, мы можем перейти к реальной разнице между классом и структурой.

Чем они отличаются?

  • Re-юзабилити: Поскольку классы образуют базовую структуру, их можно использовать повторно; Структуры, однако, представляют собой отдельные элементы с определенными свойствами, поэтому их нельзя использовать повторно. Например, продуктовый магазин Class может быть использован для любого типа продуктового магазина, но Struct grocery_entrance специфичен только для этого, и нет смысла повторно использовать его в других классах..
  • Видимость: Все функции в классе являются общедоступными для его объектов. Например, у нас есть функция с именем 'things' в классе 'store'. Функция «вещи» видна всем ее объектам, таким как «продуктовый магазин», «магазин канцелярских товаров» и т. Д. Такая структура невозможна в Structs, поскольку данные структуры ограничены самим собой и не видны другим структурам. Чтобы прояснить ситуацию, мы можем сказать, что данные «grocery_entrance» не являются публично видимыми для всех других магазинов..
  • Передать по ссылке и передать по значению: Передача по ссылке отправляет только ячейку памяти, а не фактические данные для функций. Это означает, что всякий раз, когда значение изменяется, изменение отражается в соответствующих функциях. Передача по значению, в свою очередь, просто отправляет значение в функцию. В этом случае изменение значения после его отправки не будет отражено в функции. Класс использует передачу по ссылке, а Struct использует значение передачи.
  • Наследование: Классы могут в дальнейшем наследоваться для формирования подклассов, но Structs не может использовать наследование. Например, магазин классов предоставляет свои функции подклассу «продуктовый магазин». Но структура 'grocery_entrance' не может наследовать ни одну функцию. Можно сказать, что здесь нет такого понятия, как субструктура..
  • Видимость по умолчанию: Все члены класса по умолчанию сохраняются как частные объекты, тогда как члены структуры по умолчанию сохраняются как открытые объекты..
  • Размер пустого класса и структуры: Класс использует размер 1 байт, даже когда он пуст, тогда как Struct никогда не использует память, когда она пуста. Это означает, что мы можем сказать, что размер пустой структуры равен 0 байт..
  • Вывоз мусора: Сборка мусора возможна с классами, так как они используют передачу по ссылке. Следовательно, проще выполнить очистку в одном месте, где хранятся данные. С другой стороны, сборка мусора невозможна в Struct, так как она использует передачу по значению, а данные разбросаны в разных местах..
  • Управление памятью: Поскольку Class допускает сборку мусора, управление памятью также эффективно; однако, это не так эффективно со структурами.
  • Конструктор: Конструктор обычно инициализирует класс с определенными указанными значениями. Мы можем смотреть на это как на что-то, что было инициализировано значениями. Если необходимо создать новый класс, конструктор вызывается для выделения памяти для этого экземпляра. Мы даже можем передавать значения в качестве аргументов при вызове конструктора. Давайте теперь перейдем к нашему актуальному обсуждению. Классы допускают конструкторы всех типов, например с аргументами или без них, тогда как структуры допускают только конструкторы с аргументами, то есть параметризованные конструкторы.
  • деструктор: Деструктор вызывается всякий раз, когда нам нужно удалить экземпляр класса. Деструктор, в свою очередь, удаляет этот экземпляр и освобождает память. Класс может использовать деструктор, тогда как структура не может.
  • Инициализация переменных-членов: В классах мы можем инициализировать переменные-члены напрямую; такая инициализация невозможна в Structs.
  • Создание объекта: Общий синтаксис для создания объекта в классах:

Demo obj = new Demo ();

Это означает, что мы должны использовать ключевое слово «new» при создании объектов класса. Это не требуется при создании объектов Structs. Просто взгляните на их синтаксис:

Демо объект;

Он отлично работает даже без ключевого слова «новый».

Когда использовать класс и когда использовать Struct?

Поскольку классы более гибки в совместном использовании данных и функций, мы можем пойти на это, когда используемые объекты являются сложными и большими. В нашем примере торговый центр может использовать класс «магазин» для лучшего представления системы. Структуры, однако, ограничены меньшими объектами, так как они сравнительно менее эффективны, чем классы. Поэтому, если вы разрабатываете собственный магазин, Structs - лучший выбор..

Как преобразовать структуру в класс и наоборот?

Возможно, вы слышали термины «бокс» и «распаковка» для преобразования Struct в класс, и наоборот. Хотя это эффективные процессы, помогающие нам в обращении, к ним следует относиться с осторожностью. Поскольку это напрямую влияет на области памяти, это оказывает огромное влияние на производительность нашей системы. Кроме того, это влияет на процессы сбора мусора и приводит к общей неэффективности системы. Поэтому используйте эти преобразования только при необходимости.

Давайте посмотрим на вышеупомянутые различия в табличной форме.

S.No Концепции Различия
Учебный класс Struct
1 Повторное удобство и простота использования Полностью повторное использование Не может использоваться повторно
2 видимость Все функции класса видны его объектам Данные объекта структуры не видны другим объектам той же структуры
3 Передать по ссылке и передать по значению Использует Pass by Reference Использует проход по значению
4 наследование Функции класса могут наследоваться его подклассами; позволяет наследование Никогда не разрешает наследование
5 Видимость по умолчанию Все члены класса являются закрытыми по умолчанию Все члены структуры по умолчанию общедоступны
6 Размер когда пусто Размер пустого класса - 1 байт. Размер пустой структуры составляет 0 байт.
7 Вывоз мусора Поскольку он использует передачу по ссылке, сборка мусора возможна Поскольку используется передача по значению, сборка мусора невозможна
8 Управление памятью Простота процесса сбора мусора помогает в эффективном управлении памятью Отсутствие сборки мусора приводит к плохому управлению памятью
9 Конструкторы Позволяет конструкторам всех типов, например, с параметрами или без параметров Разрешены только параметризованные конструкторы
10 деструкторы Можно использовать Не могу использовать это
11 Инициализация переменных-членов Позволяет прямую инициализацию переменных-членов Не разрешает прямую инициализацию слов переменных-членов
12 Создание объекта При создании объекта необходимо использовать ключевое слово «новый» Необязательно использовать ключевое слово «новый» при создании объекта
13 Когда использовать? Лучше для больших и сложных объектов, где требуется наследование Лучше для небольших и простых объектов, где наследование имеет меньшее значение.

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