Różnica między klasą a strukturą

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

Co to jest klasa i obiekt:

Są to dwie ważne koncepcje związane z programowaniem obiektowym i stanowią podstawę do sformułowania funkcji i danych przekazywanych do innych funkcji. Dla lepszego zrozumienia możemy skorelować go z przykładem z prawdziwego życia. Klasę można uznać za sklep, a Przedmiotem może być dowolny indywidualny, konkretny sklep, taki jak sklep spożywczy, artykuły papiernicze, owoce itp. Wszystkie przedmioty mają wspólne właściwości głównej klasy - sklep - i z kolei obiekty mogą mieć swoje własne wyłączne właściwości, takie jak określony projekt, oświetlenie itp. Poprzez obiekty możemy faktycznie korzystać z klasy; tworzą instancje klasy.

Składnia klasy

Sklep klasy

publiczne ciągi znaków;

projekt ciągów publicznych;

Składnia obiektu

Sklep spożywczy = nowy sklep ();

Store Stationery = new Store ();

Co to jest konstrukcja?

Struct zawiera tylko dane, dlatego jest pomocny w tworzeniu indywidualnych wymagań dotyczących danych za pomocą obiektów Struct. W przeciwieństwie do klasy brakuje jej funkcji. Oto jego składnia:

struct grocery_entrance

char nazwa_wejścia [50];

int entrance_size;

sklep spożywczy;

Wszystkie sklepy mogą korzystać z „wejścia” Struct z indywidualnymi nazwami i rozmiarami.

Co to jest dziedziczenie?

Jest to podobne do sposobu, w jaki syn dziedziczy majątek ojca, a z kolei syn może również dodać kilka innych swoich rzeczy. Klasa może być klasą bazową lub pochodną, ​​w której pierwsza może być wykorzystana jako podstawa do utworzenia drugiej. Klasa pochodna dodaje sobie 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 przypisany 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 konstrukcją.

Czym się różnią??

  • Ponowne użycie: Ponieważ Klasy stanowią podstawową strukturę, można je ponownie wykorzystać; Konstrukcje są jednak pojedynczymi elementami o określonych właściwościach, dlatego nie można ich ponownie użyć. Na przykład, klasa sklepu spożywczego może być używana dla dowolnego rodzaju sklepu spożywczego, ale Struct grocery_entrance jest specyficzny dla tego samego i nie ma sensu ponownie używać go w innych klasach.
  • Widoczność: Wszystkie funkcje w klasie są publicznie dostępne dla jej obiektów. Na przykład mamy funkcję o nazwie „rzeczy” w klasie „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 struktur są ograniczone do siebie i nie są widoczne dla innych Struktur. Aby to wyjaśnić, możemy powiedzieć, że dane „sklep spożywczy” nie są publicznie widoczne dla wszystkich innych sklepów.
  • Przekaż odniesienie i przekaż wartość: Przekaż przez odniesienie wysyła tylko funkcje do pamięci, a nie rzeczywiste dane do funkcji. Oznacza to, że ilekroć wartość się zmienia, zmiana ta jest odzwierciedlana w odpowiednich funkcjach. Z kolei przekazywanie wartości to po prostu wysyłanie wartości do funkcji. W takim przypadku zmiana wartości po jej wysłaniu nie zostanie odzwierciedlona w funkcji. Klasa używa pass by referen, a Struct używa pass pass.
  • Dziedzictwo: Klasy można dalej dziedziczyć, tworząc podklasy, ale Struktury nie mogą korzystać z dziedziczenia. Na przykład, Class Store nadaje swoje funkcje podklasie „sklep spożywczy”. Ale struktura „grocery_entrance” nie może odziedziczyć żadnej funkcji. Można powiedzieć, że nie ma tutaj takiej koncepcji jak podstruktura.
  • Domyślna widoczność: Wszyscy członkowie klasy są domyślnie utrzymywani jako podmioty prywatne, podczas gdy członkowie Struct są domyślnie utrzymywani jako podmioty publiczne.
  • Rozmiar pustej klasy i struktury: Klasa używa wielkości 1 bajtu, nawet gdy jest pusta, natomiast Struct nigdy nie używa pamięci, gdy jest pusta. Oznacza to, że możemy powiedzieć, że rozmiar pustej struktury jest równy 0 bajtów.
  • Zbieranie śmieci: Usuwanie śmieci jest możliwe w przypadku klas, ponieważ używają one przekazywania przez referencję. Dlatego łatwiej jest przeprowadzić czyszczenie w jednym miejscu, w którym przechowywane są dane. Z drugiej strony zbieranie śmieci nie jest możliwe w przypadku Struct, ponieważ wykorzystuje on przekazanie wartości, a dane są rozproszone w różnych lokalizacjach.
  • Zarządzanie pamięcią: Ponieważ klasa umożliwia zbieranie śmieci, zarządzanie pamięcią jest również skuteczne; nie jest to jednak tak skuteczne w przypadku Struktur.
  • Konstruktor: Konstruktor zazwyczaj inicjuje klasę pewnymi określonymi wartościami. Możemy na to patrzeć jak na coś, co zostało zainicjowane wartościami. Jeśli trzeba utworzyć nową klasę, wywoływany jest konstruktor, aby przydzielić pamięć dla tego wystąpienia. Możemy nawet przekazywać wartości jako argumenty podczas wywoływania konstruktora. Przejdźmy teraz do naszej faktycznej dyskusji. Klasy zezwalają na konstruktory wszystkich typów, takie jak z argumentami lub bez, podczas gdy struktury zezwalają tylko na konstruktory z argumentami, tj. Sparametryzowane konstruktory.
  • Burzyciel: Destruktor jest wywoływany za każdym razem, gdy musimy usunąć instancję klasy. Z kolei destruktor usuwa tę instancję i zwalnia pamięć. Klasa może używać destruktora, podczas gdy Struktura nie.
  • Inicjalizacja zmiennych członkowskich: W klasach możemy bezpośrednio inicjować zmienne składowe; taka inicjalizacja nie jest możliwa w przypadku Struktur.
  • Tworzenie obiektu: Ogólna składnia tworzenia obiektów w klasach to:

Demo obj = new Demo ();

Oznacza to, że musimy używać słowa kluczowego „new” podczas tworzenia obiektów klasy. Nie jest to wymagane przy tworzeniu obiektów Struktur. Spójrz tylko na ich składnię:

Demo obj;

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

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

Ponieważ klasy są bardziej elastyczne w przekazywaniu danych i funkcji razem, możemy to zrobić, gdy używane obiekty są złożone i duże. W naszym przykładzie centrum handlowe może użyć klasy „sklep”, aby lepiej wyrazić system. Struktury są jednak ograniczone do mniejszych obiektów, ponieważ są stosunkowo mniej skuteczne niż klasy. Dlatego jeśli projektujesz własny sklep, Struktury są lepszym wyborem.

Jak przekonwertować konstrukcję na klasę i odwrotnie?

Być może słyszałeś terminy „boks” i „rozpakowanie”, aby przekonwertować Strukturę na klasę i odwrotnie. Chociaż są to skuteczne procesy, które pomagają nam w konwersji, należy się z nimi obchodzić ostrożnie. Ponieważ ma to bezpośredni wpływ na lokalizacje pamięci, ma ogromny wpływ na wydajność naszego systemu. Ponadto wpływa na procesy usuwania śmieci i skutkuje ogólną nieefektywnością 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 Ponowna użyteczność Całkowicie wielokrotnego użytku Nie nadaje się do ponownego użycia
2) Widoczność Wszystkie funkcje klasy są widoczne dla jej obiektów Dane obiektu konstrukcji nie są widoczne dla innych obiektów tej samej konstrukcji
3) Przekaż odniesienie i przekaż wartość Używa polecenia Przekaż przez odniesienie Korzysta z funkcji przekazywania według wartości
4 Dziedzictwo Funkcje klasy mogą być dziedziczone 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 publiczni
6 Rozmiar po opróżnieniu Rozmiar pustej klasy wynosi 1 bajt Rozmiar pustej struktury wynosi 0 bajtów
7 Zbieranie śmieci Ponieważ używa przekazywania przez odwołanie, możliwe jest zbieranie śmieci Ponieważ korzysta z funkcji przekazywania według, odśmiecanie nie jest możliwe
8 Zarządzanie pamięcią Łatwość procesu czyszczenia pamięci pomaga w efektywnym zarządzaniu pamięcią Brak wyrzucania elementów bezużytecznych powoduje złe zarządzanie pamięcią
9 Konstruktory Pozwala konstruktorom wszystkich typów, na przykład z parametrami lub bez parametrów Zezwala tylko na sparametryzowane konstruktory
10 Niszczyciele Można go użyć Nie można tego użyć
11 Inicjalizacja zmiennych członkowskich Umożliwia bezpośrednią inicjalizację zmiennych składowych Nie pozwala na bezpośrednią inicjalizację słów zmiennych składowych
12 Tworzenie obiektów Konieczne jest użycie słowa kluczowego „new” podczas tworzenia obiektu Opcjonalne jest użycie słowa kluczowego „new” podczas tworzenia obiektu
13 Kiedy użyć? Lepsze 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.

Omówiliśmy prawie wszystkie różnice między klasą a strukturą, a jeśli uważasz, że czegoś brakuje, daj nam znać. Nauczmy się razem i jak najlepiej wykorzystaj tę wiedzę!