Класс и структура

Anonim

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

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

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

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

Класс Store {

публичные вещи;

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

}

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

Магазин бакалейных товаров = новый магазин ();

Store Stationery = новый Store ();

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

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

struct grocery_entrance {

char имя_пользователя [50];

int entry_size;

} grocery_entrance;

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

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

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

Теперь, когда мы знакомы с базовыми понятиями, мы можем вникать в фактическую разницу между Class и Struct.

Как они отличаются?

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

Demo obj = new Demo ();

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

Демоверсия;

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

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

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

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

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

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

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

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