Forskjell mellom arv og polymorfisme

Forfatter: Laura McKinney
Opprettelsesdato: 1 April 2021
Oppdater Dato: 17 Kan 2024
Anonim
How language shapes the way we think | Lera Boroditsky
Video: How language shapes the way we think | Lera Boroditsky

Innhold


Arv muliggjør, gjenbruk av kode og polymorfisme er forekomsten av en funksjon med annen 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 dynamisk å bestemme hvilken form for en funksjon som skal påberopes.

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningArvpolymorfisme
grunn~~POS=TRUNCArv oppretter en ny klasse ved å bruke egenskapene til den allerede eksisterende klassen.Polymorfisme er i utgangspunktet et vanlig grensesnitt for flere former.
GjennomføringArv implementeres i utgangspunktet på klasser.Polymorfisme implementeres i utgangspunktet på funksjon / metoder.
BrukFor å støtte konseptet om gjenbrukbarhet i OOP og redusere lengden på koden.Lar objekt bestemme hvilken form for funksjon som skal påberopes når, på kompileringstidspunktet (overbelastning) samt kjøretid (overstyring).
skjemaerArv kan være en enkel arv, multippel arv, flernivå arv, hierarkisk arv og hybrid arv.Polymorfisme kan være en kompilertidspolymorfisme (overbelastning) eller løpetidspolymorfisme (overstyring).
EksempelKlassebordet kan arve funksjonen til klassemøbler, ettersom bord er møbler.Klassen study_table kan også ha funksjonen set_color () og en class Dining_table kan også ha funksjonen set_color (), så hvilken form av set_color () -funksjonen som skal påberopes kan avgjøres på begge, sammenstille tid og kjøretid.


Definisjon av arv:

Arv er en av de avgjørende funksjonene i OOP, som sterkt støtter “gjenbrukbarhet”. Gjenbrukbarhet kan beskrives som å opprette en ny klasse ved å gjenbruke egenskapene til den eksisterende klassen. I arv er det en baseklasse, som arves av den avledede klassen. Når en klasse arver noen annen klasse, blir medlemmene av baseklassen medlemmet (e) av en avledet klasse.

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

klasse avledet-klasse-navn: access-spesifier base-class-name {// body of class};

Her gir tilgangspesifikatoren modus for tilgang (privat, offentlig, beskyttet) til medlemmet / medlemmene i baseklassen til den avledede klassen. Hvis ingen tilgangsspesifikasjon er til stede, regnes den som "privat" som standard. I C ++, hvis den avledede klassen er "struktur", er tilgangspesifikatoren "offentlig" som standard.

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


  • Enkeltarv (bare én superklasse)
  • Flere arv (flere superklasser)
  • Hierarkisk arv (en super klasse, mange underklasser)
  • Multiple arv (avledet fra en avledet klasse)

I Java arver klassen den andre klassen ved å bruke nøkkelordet “extends”. I Java blir baseklassen referert til som en superklasse, og avledet klasse blir referert til som en underklasse. En underklasse har ikke tilgang til medlemmene i baseklassen, som er erklært som "privat". Den generelle formen som arver klassen i Java, er som følger.

klasse avledet-klassens navn utvider baseklasse-navnet {// kroppen av klassen};

Java støtter ikke arven fra flere arv, mens den støtter flernivåhierarki. I Java kan det hende at en superklasse vil skjule implementeringsdetaljene sine, og den gjør noen del av dataene "private". Som i Java, kan en underklasse ikke få tilgang til de private medlemmene i superklassen, og hvis en underklasse vil ha tilgang til eller initialisere medlemmene, gir Java en løsning. Underklassen kan henvise medlemmene til sin umiddelbare superklasse ved å bruke et nøkkelord "super". Husk at du bare kan få tilgang til medlemmene i den umiddelbare superklassen.

‘Super’en har to generelle former. Den første er at den bruker å kalle konstruktøren av superklasse. Det andre er å få tilgang til medlemmet i superklassen som er skjult av medlemmet av underklassen.

// første form for å ringe konstruktøren. class supper_class {supper_class (argument_list) {..} // konstruktør av super klasse}; klasse sub_class utvider supper_class {sub_class (argument_list) {..} // konstruktør av sub_class super (argument_list); // sub_class kaller konstruktøren av superklassen}};

// sekund for superklasse supper_class {int i; } klasse sub_class utvider supper_class {int i; sub_class (int a, int b) {super.i = a; // i superklassen i = b; // i av underklasse}};

Definisjon av polymorfisme

Begrepet polymorfisme betyr ganske enkelt ‘én funksjon, flere former’. Polymorfisme oppnås både på kompileringstid og kjøretid. Polymorfisme for kompileringstid oppnås gjennom "overbelastning", mens polymorfisme av løpetid oppnås gjennom "overstyring".

Polymorfismen lar objektet bestemme “hvilken form for funksjonen som skal påberopes når” på begge, sammenstille tid og kjøretid.
La oss diskutere det første konseptet med overbelastning. I 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 gangene funksjonene til overbelastede er konstruktører av klassen.

klassens overbelastning {int a, b; offentlig: int overload (int x) {// first overload () konstruktør a = x; return a; } int overload (int x, int y) {// second overload () konstruktør a = x; b = y; return a * b; }}; int main () {overbelastning O1; O1.overload (20); // første overbelastning () konstruktøranrop O1.overload (20,40); // andre overbelastning () konstruktøranrop}

La oss diskutere den andre formen for polymorfisme, dvs. Overordnet konsept kan bare implementeres til funksjonen til klassene som også implementerer arvebegrepet. I C ++ er funksjonen som skal overstyres, foranordet av nøkkelordet "virtuell" i baseklassen og omdefinert i den avledede klassen med samme prototype bortsett fra nøkkelordet "virtuell".

class base {public: virtual void funct () {// virtual function of base class cout << "Dette er en base classs funct ()"; }}; klasse avledet1: offentlig base {public: void funct () {// virtual function of base class redefined in deriv1 class cout << "Dette er en deriv11 classs funct ()"; }}; int main () {base * p, b; avledet1 d1; * P = & b; p-> funksjo (); // samtale til baseklassefunksjon (). * P =-d1; retur 0; }

  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 implementeres på klassene, mens polymorfismen implementeres på metoder / funksjoner.
  3. Ettersom arv tillater en avledet klasse å bruke elementene og metodene som er definert i baseklassen, trenger ikke den avledede klassen å definere disse elementene eller metodere den igjen, så vi kan si at den øker gjenbruk av kode og dermed reduserer lengden på koden . På den annen side gjør polymorfisme det mulig for et objekt å bestemme hvilken form for metoden den ønsker å påberope seg både på kompileringstid og kjøretid.
  4. Arven kan klassifiseres som enkelt arv, multippel arv, flernivå arv, hierarkisk arv og hybrid arv. På den annen side er polymorfisme klassifisert som overbelastning og overstyring.

Konklusjon:

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