Anbefalt, 2024

Redaksjonens

Forskjellen mellom arv og polymorfisme

Arv gjør det mulig, kode gjenbrukbarhet og polymorfismen er forekomsten av en funksjon med forskjellig form. Den grunnleggende forskjellen mellom arv og polymorfisme er at arv gjør at den allerede eksisterende koden kan gjenbrukes igjen i et program, og polymorfisme gir en mekanisme for å bestemme hvilken form for funksjon som skal påberopes.

Sammenligningstabel

Grunnlag for sammenligningArvpolymorfisme
grunn~~POS=TRUNCArv er å skape en ny klasse ved å bruke egenskapene til den allerede eksisterende klassen.Polymorfisme er i utgangspunktet et felles grensesnitt for flere former.
GjennomføringArv er i utgangspunktet implementert på klasser.Polymorfisme er i utgangspunktet implementert på funksjon / metoder.
BrukÅ støtte konseptet om gjenbruk i OOP og reduserer kodenes lengde.Tillater objekt å bestemme hvilken form for funksjonen som skal påberopes når, ved kompileringstid (overbelastning) samt kjøretid (overordnet).
skjemaerArv kan være en enkelt arv, flere arv, multilevel arv, hierarkisk arv og hybridarv.Polymorfisme kan være en kompileringstidspolymorfisme (overbelastning) eller run-time polymorfisme (overordnet).
EksempelKlassebordet kan arve funksjonen til klassen 'møbler', da et bord er et 'møbler'.Klassen 'study_table' kan også ha funksjon 'set_color ()' og en klasse 'Dining_table' kan også ha funksjon 'set_color ()', så hvilken form for set_color () -funksjonen som skal påberopes, kan avgjøres både, kompilere tid og løp tid.

Definisjon av arv:

Arv er en av de viktigste funksjonene i OOP, som sterkt støtter "gjenbruk". Gjenbrukbarhet kan beskrives som å skape en ny klasse ved å gjenbruke egenskapene til den eksisterende klassen. I arv er det en grunnklasse, som er arvet av den avledede klassen. Når en klasse arver en annen klasse, blir medlemmet / medlemene av grunnklassen medlem (er) av en avledet klasse.

Den generelle formen for å arve en klasse er som følger:

 klasse avledet klassenavn: tilgangsspesifikke baseklassenavn {// kropp av klassen}; 

Her gir tilgangsspesifikatoren tilgangen (privat, offentlig, beskyttet) til medlemmet / medlemmene i grunnklassen til den avledede klassen. Hvis ingen tilgangsspesifikator er tilstede, betraktes det som "privat" som standard. I C ++, hvis den avledede klassen er "struct", er tilgangspesifiseringen "offentlig" som standard.

I C ++ kan arv oppnås i fem former. De kan klassifiseres som: -

  • Enkelt Arv (bare en superklasse)
  • Flere arv (flere superklasser)
  • Hierarkisk arv (en super klasse, mange undergrupper)
  • Flere arv (avledet av en avledet klasse)

I Java arver klassen den andre klassen ved å bruke søkeordet "strekker seg". I Java refereres grunnklassen som en superklasse, og avledet klasse refereres som en underklasse. En underklasse kan ikke få tilgang til medlemmer av grunnklassen, som er erklært som "private". Den generelle form som arver klassen i Java er som følger.

 klasse avledet klassenavn utvider baseklassenavn {// kropp av klassen}; 

Java støtter ikke arv av flere arv, mens den støtter multilevel-hierarki. I Java kan noen ganger en superklasse gjemme sine implementeringsdetaljer, og det gjør en del av dataene "private". Som i Java kan en underklasse ikke få tilgang til de private medlemmene av superklassen, og hvis en underklasse ønsker å få tilgang til eller initialisere disse medlemmene, gir Java en løsning. Underklassen kan referere medlemmene av sin umiddelbare superklasse ved å bruke et søkeord "super". Husk, du kan bare få tilgang til medlemmene av den umiddelbare superklassen.

Den "super" har to generelle former. Den første er, det bruker å ringe konstruktøren til superklasse. Den andre er å få tilgang til medlemmet av superklassen som er skjult av medlemmet av underklassen.

 // første form for å ringe til konstruktøren. klasse supper_class {supper_class (argument_list) {..} // konstruktør av super klasse}; klasse sub_class strekker supper_class {sub_class (argument_list) {..} // konstruktør av sub_class super (argument_list); // sub_class kaller konstruktøren til super klasse}}; 
 // sekund for av "super" klasse supper_class {int i; } klasse sub_class strekker supper_class {int i; sub_class (int a, int b) {super.i = a; // 'jeg' av superklasse i = b; // 'jeg' av underklasse}}; 

Definisjon av polymorfisme

Begrepet polymorfisme betyr ganske enkelt 'en funksjon, flere former'. Polymorfisme oppnås ved både kompileringstid og løpstid. Kompileringstidspolymorfismen oppnås gjennom "overbelastning", mens løpstidspolymorfismen oppnås gjennom "tvingende".

Polymorfismen tillater objektet å bestemme "hvilken form for funksjonen som skal påberopes når" både, kompilere tid og løpe tid.
La oss diskutere det første begrepet overbelastning. Ved overbelastning definerer vi en funksjon i klassen mer enn en gang med forskjellig datatype og antall parametere, mens funksjonen som skal overbelastes, må ha samme returtype. De fleste ganger er funksjonene til overbelastet konstruksjoner av klassen.

 klasse overbelastning {int a, b; offentlig: int overload (int x) {// første overload () constructor a = x; returnere a; } int overbelastning (int x, int y) {// andre overload () constructor a = x; b = y; returner a * b; }}; int main () {overload O1; O1.overload (20); // første overbelastning () konstruktør samtale O1.overload (20, 40); // andre overbelastning () konstruktør samtale} 

La oss nå diskutere den andre form for polymorfisme, dvs. tvingende. Begrepet overordnet kan bare implementeres til klassens funksjon, som også implementerer begrepet arv. I C ++ er funksjonen som skal overstyres, forfulgt av søkeordet "virtuelt" i grunnklassen og omdefinert i den avledede klassen med samme prototype bortsett fra søkeordet "virtuelt".

 klassebase {public: virtual void funct () {// virtuell funksjon av base class cout << "Dette er en grunnklassens funksjon ()"; }}; klasse derived1: offentlig base {public: void funct () {// virtuell funksjon av grunnklassen omdefinert i derived1 class cout 

Viktige forskjeller mellom arv og polymorfisme

  1. Arv er å skape en klasse som henter sin funksjon fra en allerede eksisterende klasse. På den annen side er polymorfisme et grensesnitt som kan defineres i flere former.
  2. Arv er implementert på klassene, mens polymorfismen er implementert på metoder / funksjoner.
  3. Ettersom arv gjør det mulig for en avledet klasse å bruke elementene og metodene som er definert i grunnklassen, trenger ikke den avledede klassen å definere disse elementene eller metode den igjen, så vi kan si at det øker kodegenbrukbarheten og dermed reduserer kodenes lengde . På den annen side gjør polymorfisme det mulig for en gjenstand å bestemme hvilken form for metoden den vil bruke på både kompileringstid og løpstid.
  4. Arven kan klassifiseres som enkelt arv, multiple arv, multilevel arv, hierarkisk arv og hybrid arv. På den annen side klassifiseres polymorfisme som overbelastning og overordnet.

Konklusjon:

Arv og polymorfisme er sammenhengende begreper, da den dynamiske polymorfismen gjelder for klassene som også implementerer begrepet arv.

Top