Różnica między klasą a struct

Różnica między klasą a struct

Zanim zrozumiemy różnicę między klasą a strukturą, powinniśmy znać kilka podstawowych pojęć z nimi. Bez zrozumienia pojęć trudno jest zrozumieć różnice między nimi.

Co to jest klasa i obiekt:

Są to dwa ważne pojęcia związane z programowaniem zorientowanym na obiekt i stanowią one podstawę do obramowania funkcji i danych przekazywania innych funkcji. Aby uzyskać lepsze zrozumienie, możemy go skorelować z prawdziwym przykładem. Klasy można uznać za sklep, a przedmiotem może być dowolny z indywidualnych, specyficznych sklepów, takich jak sklep spożywczy, artykuły papiernicze, owoce itp. Wszystkie obiekty mają wspólne właściwości głównej klasy -sklepu -a z kolei obiekty mogą mieć własne wyłączne właściwości, takie jak określony projekt, oświetlenie itp.  Za pośrednictwem obiektów możemy faktycznie korzystać z klasy; tworzą przypadki klasy.

Składnia klasy

Sklep klasowy

String publiczne rzeczy;

Publiczny projekt sznurka;

Składnia obiektu

Store Grocery = New Store ();

Store Spiterery = New Store ();

Co to jest struktura?

Struktura obejmuje tylko dane, a zatem jest pomocna w ramowaniu poszczególnych wymagań danych za pośrednictwem obiektów struktury. W przeciwieństwie do klasy, brakuje mu funkcji. Oto jego składnia:

struct Grocery_entrance

Char Entrance_name [50];

int entrance_size;

Grocery_entrance;

Wszystkie sklepy mogą używać struktury „wejścia” z poszczególnymi nazwami i rozmiarami.

Co to jest dziedzictwo?

Jest podobny do tego, jak syn dziedziczy majątek ojca, a z kolei syn może również dodać inne własne rzeczy. Klasa może być klasą bazową lub klasą pochodną, ​​w której pierwsza można traktować jako podstawę, aby utworzyć drugą. Klasa pochodna dodaje dla siebie kilka innych właściwości oprócz tego, co otrzymuje z klasy podstawowej. Gdy weźmiemy pod uwagę powyższy przykład, sklep spożywczy może być nadal wyprowadzony do określonego sklepu spożywczego, takiego jak sklep spożywczy XYZ.

Teraz, gdy znamy podstawowe pojęcia, możemy przejść do faktycznej różnicy między klasą a struct.

Jak różnią się?

  • Ponowne użycie: Gdy klasy stanowią podstawowe ramy, można je ponownie wykorzystać; Struktury są jednak poszczególnymi elementami o określonych właściwościach, więc nie można ich ponownie wykorzystać. Na przykład klasa sklepu spożywczego może być używana do każdego rodzaju sklepu spożywczego, ale struktura Grocery_entrance jest dla tego samego i nie ma sensu ponownie go używać w innych klasach.
  • Widoczność: Wszystkie funkcje w klasie są publicznie dostępne dla swoich obiektów. Na przykład mamy funkcję o nazwie „rzeczy” pod klasą „sklep”. Funkcja „rzeczy” jest widoczna dla wszystkich jej obiektów, takich jak „sklep spożywczy,„ sklep papierniczy ”itp. Taka widoczność nie jest możliwa w przypadku struktur, ponieważ dane struktury są ograniczone do siebie i nie są widoczne dla innych struktur. Aby wyjaśnić, możemy powiedzieć, że dane „Grocery_entrance” nie są publicznie widoczne dla wszystkich innych sklepów.
  • Przejść przez odniesienie i przełóż wartość: Przejdź przez odniesienie to wysyłanie tylko lokalizacji pamięci, a nie rzeczywistych danych do funkcji. Oznacza to, że za każdym razem, gdy zmienia się wartość, zmiana znajduje odzwierciedlenie w odpowiednich funkcjach. Z kolei przekazanie wartości po prostu wysyła wartość do funkcji. W takim przypadku zmiana wartości po jej wysłaniu nie zostanie odzwierciedlona w funkcji. Klasa używa przełęczy przez odniesienie, a struktura używa wartości PASS.
  • Dziedzictwo: Zajęcia można dalej odziedziczyć w celu utworzenia podklas, ale struktury nie mogą wykorzystywać dziedziczenia. Na przykład sklep z klasą podaje swoje funkcje podklasowej „sklepowi spożywczemu”. Ale struct „Grocery_entrance” nie może odziedziczyć żadnej funkcji. Możemy powiedzieć, że nie ma tutaj żadnej koncepcji takiej jak substruktury.
  • Domyślna widoczność: Wszyscy członkowie klasy są domyślnie utrzymani jako podmioty prywatne, podczas gdy członkowie struktury są domyślnie trzymani jako podmioty publiczne.
  • Rozmiar pustej klasy i struktury: Klasa używa rozmiaru 1 bajtu, nawet gdy jest pusta, podczas gdy struct nigdy nie używa pamięci, gdy jest pusta. Oznacza to, że możemy powiedzieć, że rozmiar pustej struktury równa się 0 bajtów.
  • Zbieranie śmieci: Kolekcja śmieci jest możliwa z klasami, ponieważ używają przepustki przez odniesienie. Dlatego łatwiej jest wykonać czyszczenie w jednym miejscu, w którym dane są przechowywane. Z drugiej strony, zbieranie śmieci nie jest możliwe w przypadku struktury, ponieważ wykorzystuje przełę według wartości, a dane są rozproszone w różnych lokalizacjach.
  • Zarządzanie pamięcią: Ponieważ klasa pozwala na zbiory śmieci, zarządzanie pamięcią jest również skuteczne; Nie jest to jednak skuteczne w strukturach.
  • Konstruktor: Konstruktor ogólnie inicjuje klasę z pewnymi określonymi wartościami. Możemy na to spojrzeć jak coś, co zostało zainicjowane wartościami. Jeśli trzeba utworzyć nową klasę, konstruktor jest wywoływany, aby przydzielić pamięć dla tej instancji. Możemy nawet przekazać wartości jako argumenty, wywołując konstruktor. Przyjdźmy teraz do naszej faktycznej dyskusji. Zajęcia pozwalają na konstruktory wszystkich typów, takich jak argumenty lub bez, podczas gdy struktury pozwalają tylko konstruktorom z argumentami, i.mi. sparametryzowane konstruktory.
  • Burzyciel: Destructor jest wywoływany ilekroć potrzebujemy usunąć instancję klasy. Z kolei destruktor usuwa tę instancję i uwalnia pamięć. Klasa może użyć destruktora, podczas gdy struktura nie może.
  • Inicjalizacja zmiennych członków: W klasach możemy bezpośrednio zainicjować zmienne członkowskie; Taka inicjalizacja nie jest możliwa w przypadku struktur.
  • Tworzenie obiektów: Ogólna składnia do tworzenia obiektów w klasach to:

Demo obj = nowe demo ();

Oznacza to, że musimy użyć słowa kluczowego „nowe” podczas tworzenia obiektów klasy. Nie jest to wymagane przy tworzeniu obiektów struktur. Po prostu spójrz na ich składnię:

Demo obj;

Działa idealnie nawet bez słowa kluczowego „nowe”.

Kiedy korzystać z klasy i kiedy używać struktury?

Ponieważ klasy są bardziej elastyczne w przekazywaniu danych i funkcji, możemy jeździć, gdy używane obiekty są złożone i duże. W naszym przykładzie centrum handlowe może korzystać z klasy „magazynu” do lepszego wyrażania systemu. Struktury są jednak ograniczone do mniejszych obiektów, ponieważ są one stosunkowo mniej skuteczne niż klasy. Dlatego jeśli zaprojektujesz własny sklep, struktury są lepszym wyborem.

Jak przekonwertować strukturę na klasę i odwrotnie?

Być może słyszałeś terminy „boksowanie” i „rozpakowywanie”, aby przekonwertować struct na klasę i odwrotnie. Chociaż są to skuteczne procesy, które pomogą nam w konwersji, należy je zachować ostrożnie. Ponieważ wpływa to bezpośrednio na lokalizacje pamięci, ma ogromny wpływ na wydajność naszego systemu. Ponadto wpływa na procesy zbierania śmieci i powoduje ogólną nieefektywność systemu. Dlatego używaj tych konwersji tylko w razie potrzeby.

Spójrzmy na wyżej wymienione różnice w formie tabelarycznej.

S.NIE Pojęcia Różnice
Klasa Struct
1 Ponowne użycie Całkowicie ponowne użycie Nie używać ponownego użycia
2 Widoczność Wszystkie funkcje klasy są widoczne dla jej obiektów Dane obiektu struktury nie są widoczne dla innych obiektów tego samego struktury
3 Przejść przez odniesienie i przekazanie wartości Używa podania przez odniesienie Używa przełęczy według wartości
4 Dziedzictwo Funkcje klasy mogą być odziedziczone przez jej podklasy; pozwala na dziedziczenie Nigdy nie pozwala na dziedziczenie
5 Domyślna widoczność Wszyscy członkowie klasy są domyślnie prywatni Wszyscy członkowie struktury są domyślnie publiczne
6 Rozmiar po pustym Rozmiar pustej klasy to 1 bajt Rozmiar pustej struktury to 0 bajtów
7 Zbieranie śmieci Ponieważ używa podania przez odniesienie, zbieranie śmieci jest możliwe Ponieważ wykorzystuje przełę według wartości, zbieranie śmieci nie jest możliwe
8 Zarządzanie pamięcią Łatwość zbierania śmieci pomaga w skutecznym zarządzaniu pamięcią Brak zbioru śmieci powoduje słabe zarządzanie pamięcią
9 Konstruktorzy Umożliwia konstruktory wszystkich typów, takich jak parametry lub bez Pozwala tylko sparametryzowane konstruktory
10 Destruktury Może go użyć Nie mogę go użyć
11 Inicjalizacja zmiennych członków Umożliwia bezpośrednią inicjalizację zmiennych członków Nie zezwala na bezpośrednie inicjalizację słów zmiennych członkowskich
12 Tworzenie obiektów MUSI używać słowa kluczowego „nowe” podczas tworzenia obiektów Opcjonalne jest użycie słowa kluczowego „nowe” podczas tworzenia obiektów
13 Kiedy użyć? Lepiej dla większych i złożonych obiektów, w których wymagane jest dziedziczenie Lepsze dla mniejszych i prostszych obiektów, w których dziedziczenie ma mniejsze znaczenie.

Prawie omówiliśmy wszystkie różnice między klasą a strukturą, a jeśli czujesz, że coś brakuje, daj nam znać. Nauczmy się razem i jak najlepiej wykorzystajmy tę wiedzę!