Class at Struct

Anonim

Bago natin maunawaan ang pagkakaiba sa pagitan ng Class at Struct, dapat nating malaman ang ilang mga pangunahing konsepto na nauugnay sa kanila. Nang walang pag-unawa sa mga konsepto, mahirap maunawaan ang mga pagkakaiba sa pagitan ng dalawa.

Ano ang Class at Bagay:

Ang mga ito ang dalawang mahahalagang konsepto na may kaugnayan sa Object Oriented Programming, at binubuo nila ang batayan para sa pag-frame ng mga pag-andar at data na dumadaan sa ibang mga function. Para sa isang mas mahusay na pag-unawa, maaari naming iugnay ito sa isang real-buhay na halimbawa. Ang isang Klase ay maaaring isaalang-alang bilang isang tindahan, at ang isang Bagay ay maaaring alinman sa indibidwal, tiyak na mga tindahan tulad ng grocery, stationery, prutas, atbp. Ang lahat ng mga bagay ay nagbabahagi ng mga karaniwang katangian ng pangunahing klase - ang tindahan -, at siya naman, ang mga bagay ay maaaring magkaroon ng kanilang sariling eksklusibong katangian tulad ng isang partikular na disenyo, ilaw, atbp. Sa pamamagitan ng mga bagay, maaari naming aktwal na gamitin ang klase; binubuo nila ang mga pagkakataon ng isang klase.

Syntax ng isang Class

Class Store {

pampublikong string bagay;

pampublikong disenyo ng string;

}

Syntax ng isang Bagay

Mag-imbak ng grocery = bagong Store ();

Store Stationery = bagong Store ();

Ano ang Isang Struct?

Kasama sa isang Struct ang data lamang, at sa gayon ito ay kapaki-pakinabang sa pag-frame ng mga indibidwal na mga kinakailangan ng data sa pamamagitan ng mga bagay na Struct. Hindi tulad ng isang klase, ito ay walang mga pag-andar. Narito ang syntax nito:

struct grocery_entrance {

char entrance_name [50];

int entrance_size;

} grocery_entrance;

Ang lahat ng mga tindahan ay maaaring gumamit ng Struct 'entrance' sa mga indibidwal na pangalan at sukat.

Ano ang Mana?

Ito ay katulad ng kung paano minana ng isang anak ang mga ari-arian ng kanyang ama at, gayunpaman, ang anak ay maaari ring magdagdag ng ilang iba pang mga ari-arian ng kanyang sarili. Ang Klase ay maaaring alinman sa isang base class o isang nagmula klase, kung saan ang dating ay maaaring makuha bilang batayang upang bumuo ng huli. Ang nagmumula klase ay nagdaragdag ng ilang iba pang mga katangian para sa kanyang sarili bukod sa kung ano ito ay makakakuha mula sa base klase. Kapag isinasaalang-alang natin ang halimbawa sa itaas, ang grocery store ay maaari pa ring makuha sa isang partikular na grocery store, tulad ng XYZ grocery store.

Ngayon na kami ay pamilyar sa mga pangunahing konsepto, maaari naming pumunta sa aktwal na pagkakaiba sa pagitan ng Class at Struct.

Paano Nakakaiba ang mga ito?

  • Muling paggamit: Habang ang mga Klase ay bumubuo sa pangunahing balangkas, maaari silang muling gamitin; Ang mga istruktura, gayunpaman, ay mga indibidwal na elemento na may mga tiyak na katangian, kaya hindi sila maaaring muling gamitin. Halimbawa, maaaring gamitin ang grocery store Class para sa anumang uri ng grocery store, ngunit ang Struct grocery_entrance ay tiyak para sa nag-iisa at walang point sa muling paggamit nito sa iba pang mga klase.
  • Visibility: Ang lahat ng mga function sa isang Klase ay magagamit ng publiko sa Mga Bagay nito. Halimbawa, mayroon tayong function na pinangalanang 'mga bagay' sa ilalim ng tindahan ng Class '. Ang mga bagay na 'function' ay makikita sa lahat ng mga Bagay nito, tulad ng 'grocery store,' stationery store ', atbp. Ang ganitong pagpapakita ay hindi posible sa Structs bilang data ng struct ay limitado sa sarili nito at hindi nakikita sa ibang mga Struct. Upang gawing malinaw ang mga bagay, maaari naming sabihin na ang data ng 'grocery_entrance' ay hindi makikita ng publiko sa lahat ng iba pang mga tindahan.
  • Pass sa pamamagitan ng Reference & Pass sa pamamagitan ng Halaga: Ang Pass sa pamamagitan ng Reference ay nagpapadala lamang ng lokasyon ng memorya at hindi ang aktwal na data sa mga pag-andar. Nangangahulugan ito na tuwing nagbabago ang halaga, ang pagbabago ay makikita sa mga kaukulang function. Ang pass by value naman ay nagpapadala lamang ng halaga sa function. Sa kasong ito, ang isang pagbabago sa halaga pagkatapos na ipadala ay hindi makikita sa function. Gumagamit ang klase ng pass ayon sa sanggunian, at ang Struct ay gumagamit ng pass value.
  • Panukala: Ang mga klase ay maaaring mas minana upang bumuo ng mga sub-class, ngunit ang mga Struct ay hindi maaaring magamit ang mana. Halimbawa, ang Class Store ay nagbibigay ng mga function sa sub-class na 'grocery store'. Ngunit ang Struct 'grocery_entrance' ay hindi maaaring magmana ng anumang pag-andar. Maaari naming sabihin na walang konsepto tulad ng sub-struct dito.
  • Default visibility: Ang lahat ng mga kasapi ng isang Class ay pinananatiling bilang pribadong entity sa pamamagitan ng default, samantalang ang mga miyembro ng isang Struct ay itinatago bilang mga pampublikong entity sa pamamagitan ng default.
  • Ang laki ng isang walang laman na Klase at Struct: Ang Class ay gumagamit ng isang sukat ng 1 Byte kahit na ito ay walang laman, samantalang ang Struct ay hindi gumagamit ng anumang memorya kapag ito ay walang laman. Ito ay nangangahulugan na maaari naming sabihin na ang sukat ng isang walang laman na struct ay katumbas ng 0 Bytes.
  • Koleksyon ng basura: Ang koleksyon ng basura ay posible sa Mga Klase, habang ginagamit nila ang pass sa pamamagitan ng sanggunian. Samakatuwid, mas madaling gawin ang paglilinis sa isang lokasyon kung saan nakaimbak ang data. Sa kabilang banda, ang koleksyon ng basura ay hindi posible sa Struct, dahil ginagamit nito ang pass by value at ang data ay nakakalat sa iba't ibang mga lokasyon.
  • Pamamahala ng kaisipan: Dahil ang Class ay nagbibigay-daan sa mga koleksyon ng basura, ang memory management ay epektibo rin; gayunpaman, ito ay hindi na epektibo sa Structs.
  • Tagagawa: Ang isang tagapagbuo ay karaniwang nagsisimula sa klase na may ilang tinukoy na mga halaga. Maaari naming tingnan ito tulad ng isang bagay na na-initialize na may mga halaga. Kung ang isang bagong klase ay dapat na nilikha, ang tagapagbuo ay tinatawag na maglaan ng memorya para sa pangyayaring iyon. Maaari rin nating ipasa ang mga halaga bilang mga argumento habang tumatawag sa isang tagapagbuo. Dumating tayo sa ating totoong talakayan ngayon.Pinahihintulutan ng mga klase ang mga tagabuo ng lahat ng mga uri, tulad ng mayroon o walang mga argumento, samantalang hinahayaan lamang ng mga structs ang mga constructor na may mga argumento, ibig sabihin ang mga parameterized constructor.
  • Destructor: Ang isang destructor ay tinatawag na kapag kailangan namin upang tanggalin ang isang halimbawa ng isang klase. Ang destructor, sa turn, ay tinatanggal ang pagkakataon na iyon at pinalaya ang memorya. Ang isang Klase ay maaaring gumamit ng isang destructor, samantalang ang isang Struct ay hindi maaaring.
  • Mga Variable ng Miyembro Pagsisimula: Sa Mga Klase, maaari naming simulan ang mga variable ng miyembro nang direkta; Ang ganitong pagsisimula ay hindi posible sa Structs.
  • Paglikha ng Bagay: Ang pangkalahatang syntax para sa paglikha ng bagay sa mga klase ay:

Demo obj = new Demo ();

Nangangahulugan ito na dapat nating gamitin ang keyword na 'bagong' habang lumilikha ng mga bagay ng isang klase. Hindi ito kinakailangan kapag lumilikha ng mga bagay ng Structs. Tingnan lamang ang kanilang syntax:

Demo obj;

Gumagana ito nang perpekto kahit na wala ang keyword na 'bagong'.

Kailan Gamitin ang Class at Kailan Gamitin ang Struct?

Tulad ng mga Klase ay mas nababaluktot sa paghahatid ng data at mga function magkasama, maaari naming pumunta para sa mga ito kapag ang mga bagay na ginamit ay mahirap unawain at malaki. Sa aming halimbawa, maaaring gamitin ng isang Mall ang 'tindahan' ng klase upang ipahayag ang sistema nang mas mahusay. Gayunpaman, ang mga istruktura ay pinaghihigpitan sa mas maliliit na bagay, dahil medyo mas mabisa kaysa sa Mga Klase. Samakatuwid, kung mag-disenyo ka ng isang tindahan ng iyong sarili, ang mga Struct ay ang mas mahusay na pagpipilian.

Paano Mag-convert ng Struct sa isang Class at Vice Versa?

Maaaring narinig mo ang mga salitang 'boxing' at 'unboxing' upang i-convert ang isang Struct to a Class, at vice versa. Kahit na ang mga ito ay epektibong mga proseso upang matulungan kami sa conversion, dapat silang hawakan ng pag-iingat. Dahil ito ay direktang nakakaapekto sa mga lokasyon ng memory, may malaking epekto sa pagganap ng aming system. Bukod dito, nakakaapekto ito sa mga proseso ng pagkolekta ng basura at mga resulta sa pangkalahatang kawalan ng kakayahan ng sistema. Samakatuwid, gamitin lamang ang mga conversion na ito kung kinakailangan.

Tingnan natin ang nabanggit na mga pagkakaiba sa pormat na porma.

S.No Mga konsepto Mga pagkakaiba
Class Istraktura
1 Muling paggamit Ganap na muling magagamit Hindi muling magagamit
2 Visibility Ang lahat ng mga function ng isang Klase ay makikita sa mga bagay nito Ang data ng isang Object of a Struct ay hindi nakikita sa ibang mga bagay ng parehong Struct
3 Pass ayon sa Reference & pass by Value Gumagamit ng Pass sa pamamagitan ng Sanggunian Gumagamit ng Pass ayon sa Halaga
4 Panunungkulan Ang mga pag-andar ng isang klase ay maaaring minana ng mga subclasses nito; nagpapahintulot ng mana Huwag pahintulutan ang mana
5 Default Visibility Ang lahat ng mga miyembro ng isang Class ay pribado sa pamamagitan ng default Ang lahat ng mga miyembro ng isang Struct ay pampubliko sa pamamagitan ng default
6 Sukat Kapag Walang laman Ang laki ng isang walang laman na Class ay 1 Byte Ang sukat ng walang laman na Struct ay 0 Bytes
7 Collection ng Basura Habang gumagamit ito ng pass sa pamamagitan ng pagsangguni, posible ang pagkolekta ng basura Habang gumagamit ito ng pass value, hindi posible ang pagkolekta ng basura
8 Pamamahala ng kaisipan Ang kadalian sa proseso ng koleksyon ng basura ay nakakatulong sa epektibong pamamahala ng memorya Ang kakulangan ng koleksyon ng basura ay nagreresulta sa mahihirap na pamamahala ng memorya
9 Mga Constructor Pinapayagan ang mga constructor ng lahat ng uri, tulad ng mayroon o walang mga parameter Pinapayagan lamang ang mga parameterized constructor
10 Destructors Maaaring gamitin ito Hindi ito magagamit
11 Mga Variable ng Miyembro Pagsisimula Pinapayagan ang direktang pag-initialize ng mga variable ng miyembro Hindi pinapayagan ang pagsisimula ng direktang salita ng mga variable ng miyembro
12 Paglikha ng Bagay Ito ay kinakailangan upang gamitin ang keyword na 'bagong' sa paggawa ng bagay Ito ay opsyonal upang gamitin ang keyword na 'bagong' sa paggawa ng bagay
13 Kailan Magagamit? Mas mahusay para sa mas malaki at masalimuot na mga bagay kung saan kinakailangan ang mana Mas mahusay para sa mas maliit at mas simple na mga bagay kung saan ang mana ay mas mababa ang kahalagahan.

Malapit na namin ang lahat ng mga pagkakaiba sa pagitan ng Class at Struct, at kung sa palagay mo ay nawawala ang isang bagay, mangyaring ipaalam sa amin. Mag-aral tayo nang sama-sama at gawin ang karamihan ng kaalaman na iyon!