Преди да разберем разликата между Class и Struct, трябва да знаем няколко основни понятия, свързани с тях. Без разбиране на понятията е трудно да се разберат разликите между двете.
Това са двете важни концепции, свързани с обектно-ориентираното програмиране, и те формират основата за рамкиране на функциите и предаването на данни към други функции. За по-добро разбиране можем да го свържем с пример от реалния живот. Класът може да се разглежда като магазин, а Обект може да бъде всеки от отделните, специфични магазини като хранителни стоки, канцеларски материали, плодове и др. Всички обекти споделят общите свойства на основния клас - магазина - и от своя страна, обектите може да имат свои собствени изключителни свойства като специфичен дизайн, осветление и т.н. Чрез обектите всъщност можем да използваме класа; те образуват инстанциите на клас.
Синтаксис на клас
Class Store
публични струни неща;
публичен струнен дизайн;
Синтаксис на обект
Магазин за хранителни стоки = нов магазин ();
Магазин канцеларски материали = нов магазин ();
Структурата включва само данните и затова е полезно при формулирането на отделните изисквания за данни чрез обектите Struct. За разлика от клас, той няма функции. Ето неговия синтаксис:
struct grocery_entrance
char entry_name [50];
int entry_size;
хранителен магазин
Всички магазини могат да използват входа на Struct с индивидуални имена и размери.
Подобно е на това как син наследява притежанията на баща си, а от своя страна синът може да добави и други свои притежания. Класът може да бъде или базов клас, или производен клас, в който първият може да бъде взет като основа за формиране на втория. Полученият клас добавя малко други свойства за себе си, освен това, което получава от базовия клас. Когато разгледаме горния пример, хранителният магазин все още може да бъде изведен в специфичен магазин за хранителни стоки, като например магазин за хранителни стоки XYZ.
Сега, когато сме запознати с основните понятия, можем да влезем в действителната разлика между Class и Struct.
Demo obj = new Demo ();
Това означава, че трябва да използваме ключовата дума „new“, докато създаваме обекти от клас. Това не се изисква при създаване на обекти на Structs. Просто погледнете техния синтаксис:
Demo obj;
Работи перфектно дори и без ключовата дума „ново“.
Тъй като класовете са по-гъвкави в предаването на данни и функции заедно, можем да се справим с тях, когато използваните обекти са сложни и големи. В нашия пример, Mall може да използва класа "store", за да изрази системата по-добре. Конструкциите обаче са ограничени до по-малки обекти, тъй като те са сравнително по-малко ефективни от класовете. Ето защо, ако проектирате собствен магазин, Structs са по-добрият избор.
Може би сте чували термините „boxing“ и „unboxing“ за преобразуване на структура в клас и обратно. Въпреки че това са ефективни процеси, които ни помагат в преобразуването, с тях трябва да се работи внимателно. Тъй като това се отразява пряко на местата на паметта, има огромно влияние върху работата на нашата система. Освен това влияе върху процесите на събиране на боклука и води до цялостна неефективност на системата. Затова използвайте тези конверсии само когато е необходимо.
Нека разгледаме горепосочените разлики в таблична форма.
S.No | Концепции | Различията | |
клас | Struct | ||
1 | Re-използваемост | Напълно повторно използваеми | Не може да се използва повторно |
2 | видимост | Всички функции на клас са видими за неговите обекти | Данните на обект на структура не се виждат от други обекти на същата структура |
3 | Преминаване по справка и преминаване по стойност | Използвайте Pass by Reference | Използвайте Pass by Value |
4 | наследяване | Функциите на клас могат да бъдат наследени от неговите подкласове; позволява наследяване | Никога не позволява наследяване |
5 | Видимост по подразбиране | Всички членове на клас по подразбиране са частни | Всички членове на Структура са по подразбиране публични |
6 | Размер, когато е празен | Размерът на празен клас е 1 байт | Размерът на празната структура е 0 байта |
7 | Събиране на боклук | Тъй като се използва пропуск за справка, е възможно събирането на боклука | Тъй като използва преминаване по стойност, събирането на боклука не е възможно |
8 | Управление на паметта | Лекотата на процеса на събиране на боклука помага за ефективното управление на паметта | Липсата на сметосъбиране води до лошо управление на паметта |
9 | конструкторите | Позволява конструктори от всякакъв тип, като например с или без параметри | Разрешава само параметризирани конструктори |
10 | Деструкторите | Може да го използвате | Не мога да го използвам |
11 | Инициализация на променливи на членове | Позволява директна инициализация на променливите член | Не позволява директна инициализация на думи за променливи член |
12 | Създаване на обект | Задължително е да се използва ключовата дума „ново“ по време на създаването на обекта | По желание по време на създаването на обекта се използва ключовата дума „ново“ |
13 | Кога да използвате? | По-добре за по-големи и сложни обекти, където се изисква наследяване | По-добре за по-малки и по-прости обекти, където наследяването е от по-малко значение. |
Почти сме покрили всички разлики между Class и Struct и ако смятате, че нещо липсва, моля, уведомете ни. Нека се научим заедно и да се възползваме максимално от тези знания!