Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp paveldėjimo ir polimorfizmo

Paveldėjimas leidžia, kodų pakartotinis panaudojimas ir polimorfizmas - vienos funkcijos atsiradimas kitokia forma. Pagrindinis skirtumas tarp paveldėjimo ir polimorfizmo yra tas, kad paveldėjimas leidžia pakartotinai panaudoti jau esamą kodą programoje, o polimorfizmas suteikia mechanizmą, leidžiantį dinamiškai nuspręsti, kokios formos funkciją reikia remtis.

Palyginimo diagrama

Palyginimo pagrindasPaveldėjimasPolimorfizmas
PagrindinisPaveldėjimas sukuria naują klasę, naudojant jau egzistuojančios klasės savybes.Polimorfizmas iš esmės yra bendra sąsaja daugeliui formų.
ĮgyvendinimasPaveldėjimas iš esmės įgyvendinamas klasėse.Polimorfizmas iš esmės įgyvendinamas pagal funkciją / metodus.
NaudokiteRemti pakartotinio naudojimo koncepciją OOP ir sumažina kodo trukmę.Leidžia objektui nuspręsti, kokia funkcija turi būti naudojama, kai kompiliavimo metu (perkrova), taip pat vykdymo laikas (viršesnis).
FormosPaveldėjimas gali būti vienas paveldėjimas, daugkartinis paveldėjimas, daugiapakopis paveldėjimas, hierarchinis paveldėjimas ir hibridinis paveldėjimas.Polimorfizmas gali būti kompiliavimo laiko polimorfizmas (perkrova) arba paleisties polimorfizmas (viršesnis).
PavyzdysKlasės „stalas“ gali paveldėti klasės „baldų“ savybę, nes „stalas“ yra „baldai“.Klasė „study_table“ taip pat gali turėti funkciją „set_color ()“, o klasė „Dining_table“ taip pat gali turėti funkciją „set_color ()“, taigi, kokia set_color () funkcija, kuria remtis, gali būti sprendžiama abu, kompiliavimo metu ir paleisti laiką.

Paveldėjimo apibrėžtis:

Paveldėjimas yra vienas iš svarbiausių OOP bruožų, stipriai remiančių „pakartotinį naudojimą“. Pakartotinį panaudojimą galima apibūdinti kaip naujos klasės kūrimą, pakartotinai panaudojant esamos klasės savybes. Paveldėjimu yra pagrindinė klasė, kurią paveldi išvestinė klasė. Kai klasė paveldi bet kurią kitą klasę, bazinės klasės narys (-iai) tampa išvestinės klasės nariu (-ais).

Bendra klasės paveldėjimo forma yra tokia:

 klasės išvestinis-klasės pavadinimas: prieigos specifieriaus bazinės klasės pavadinimas {// klasė}; 

Čia prieigos specifikacija suteikia prieigos klasės (privataus, viešojo, saugomo) prie pagrindo klasės nariui (-ams) prie gautos klasės režimą. Jei nėra jokios prieigos specifikacijos, ji pagal nutylėjimą laikoma „privačia“. C + +, jei išvestinė klasė yra „struct“, prieigos specifikatorius pagal nutylėjimą yra „viešas“.

C + + paveldėjimas gali būti pasiektas penkiomis formomis. Jie gali būti klasifikuojami kaip: -

  • Pavienis paveldėjimas (tik viena super klasė)
  • Keli paveldėjimai (keletas superklasių)
  • Hierarchinis paveldėjimas (viena super klasė, daugybė poklasių)
  • Keli paveldėjimas (kilęs iš išvestos klasės)

„Java“ klasė perima kitą klasę, naudodama raktinį žodį „pratęsia“. „Java“ bazinė klasė vadinama super klasė, o išvestinė klasė vadinama poklasiu. Subklasė negali pasiekti tų bazinės klasės narių, kurie yra paskelbti „privačiais“. Bendra forma, kuri paveldi klasę Java, yra tokia.

 klasės išvestinis klasės pavadinimas pratęsia bazinės klasės pavadinimą {// kūno klasė}; 

„Java“ nepalaiko paveldėjimo kelis paveldėjimus, tuo tarpu ji palaiko daugiapakopę hierarchiją. „Java“ kartais super klasė gali paslėpti jos įgyvendinimo detales, o tam tikra dalis duomenų „privati“. Kaip ir „Java“, poklasis negali pasiekti privačių „superclass“ narių ir, jei poklasis nori pasiekti ar inicijuoti tuos narius, „Java“ pateikia sprendimą. Subklasė gali perduoti savo tiesioginės klasės narius naudodama raktinį žodį „super“. Atminkite, kad galite pasiekti tik artimiausios klasės narius.

„Super“ turi dvi bendras formas. Pirmasis - tai skambinti super klasės konstruktoriui. Antrasis - prieiti prie superklasės nario, kurį paslėpė poklasio narys.

 // pirmoji konstruktoriaus skambinimo forma. klasės supper_class {supper_class (argument_list) {..} // super klasės konstruktorius}; klasės sub_class pratęsia supper_class {sub_class (argument_list) {..} // sub_class super konstruktorių (argumentų sąrašas); // sub_class vadina super klasės konstruktorių}}; 
 // antrasis „super“ klasės supper_class {int i; } klasės sub_class pratęsia supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' super klasės i = b; // „i“ subklasės}}; 

Polimorfizmo apibrėžimas

Terminas „polimorfizmas“ paprasčiausiai reiškia „vieną funkciją, kelias formas“. Polimorfizmas pasiekiamas tiek kompiliavimo metu, tiek važiavimo metu. Kompiliavimo trukmės polimorfizmas pasiekiamas per „perkrovimą“, o paleisties laiko polimorfizmas pasiekiamas „peržengiant“.

Polimorfizmas leidžia objektui nuspręsti, „kokia funkcija turi būti naudojama, kai“ abu kompiliuoja laiką ir laiką.
Aptarkime pirmąją perkrovimo koncepciją. Perkrovimo metu mes apibrėžiame funkciją klasėje daugiau nei vieną kartą su skirtingais duomenų tipais ir parametrų skaičiumi, tuo tarpu perkraunama funkcija turi turėti tą patį grąžinimo tipą. Dauguma kartų perkrautos funkcijos yra klasės konstruktoriai.

 klasės perkrova {int a, b; viešas: int perkrova (int x) {// pirmasis perkrovos () konstruktorius a = x; grąžinti a; } int perkrova (int x, int y) {// antrasis perkrovos () konstruktorius a = x; b = y; grąžinti a * b; }}; int main () {perkrovimas O1; O1.kraunamasis krūvis (20); // pirmasis perkrovos () konstruktoriaus skambutis O1.overload (20, 40); // antrasis perkrovos () konstruktoriaus skambutis} 

Dabar aptarkime antrąją polimorfizmo formą, ty svarbiausią. Svarbiausios sąvokos gali būti įgyvendinamos tik tų klasių funkcijoms, kurios taip pat įgyvendina paveldėjimo sąvoką. „C + +“ prieš viršutinę funkciją prieš raktinį žodį „virtualus“ pagrindinėje klasėje ir iš naujo apibrėžiama išvestoje klasėje su tuo pačiu prototipu, išskyrus raktinį žodį „virtualus“.

 class base {public: virtual void funct () {// virtuali bazinės klasės cout funkcija << „Tai bazinės klasės funkcija ()“; }}; klasė išvestinė1: viešoji bazė {public: void funct () {// virtuali bazinės klasės funkcija, iš naujo apibrėžta išvestų 1 klasės cout 

Pagrindiniai paveldėjimo ir polimorfizmo skirtumai

  1. Paveldėjimas sukuria klasę, kuri savo požymį gauna iš jau egzistuojančios klasės. Kita vertus, polimorfizmas yra sąsaja, kurią galima apibrėžti įvairiomis formomis.
  2. Paveldėjimas vyksta klasėse, o polimorfizmas įgyvendinamas metodais / funkcijomis.
  3. Kadangi paveldėjimas leidžia išvestai klasei naudoti bazinėje klasėje apibrėžtus elementus ir metodus, išvestai klasei nereikia apibrėžti šių elementų ar metodo, todėl galime pasakyti, kad jis padidina kodo pakartotinį naudojimą ir todėl sumažina kodo ilgį . Kita vertus, polimorfizmas leidžia objektui nuspręsti, kokia metodo forma ji nori remtis ir kompiliavimo metu, ir vykdymo metu.
  4. Paveldėjimas gali būti klasifikuojamas kaip pavienis paveldėjimas, daugkartinis paveldėjimas, daugiapakopis paveldėjimas, hierarchinis paveldėjimas ir hibridinis paveldėjimas. Kita vertus, polimorfizmas klasifikuojamas kaip perkrova ir viršesnis.

Išvada:

Paveldėjimas ir polimorfizmas yra tarpusavyje susijusios sąvokos, nes dinaminis polimorfizmas taikomas klasėms, kurios taip pat įgyvendina paveldėjimo sąvoką.

Top