Anbefalet, 2024

Redaktørens Valg

Forskel mellem arv og polymorfisme

Arv gør det muligt at genbruge kode og polymorfismen er forekomsten af ​​en funktion med forskellig form. Den grundlæggende forskel mellem arv og polymorfisme er, at arv gør det muligt at genbruge den allerede eksisterende kode i et program, og polymorfisme giver en mekanisme til dynamisk at afgøre, hvilken form for en funktion der skal påberåbes.

Sammenligningstabel

Grundlag for sammenligningArvpolymorfi
GrundlæggendeArv skaber en ny klasse ved hjælp af egenskaberne i den allerede eksisterende klasse.Polymorfisme er dybest set en fælles grænseflade til flere former.
ImplementeringArv er grundlæggende implementeret på klasser.Polymorfisme er grundlæggende implementeret på funktion / metoder.
BrugAt understøtte begrebet genbrugelighed i OOP og reducerer længden af ​​kode.Tillader objekt at bestemme hvilken form for funktionen der skal påberåbes, når den er sammenstillet (overbelastning) samt kørselstid (overordnet).
FormsArv kan være en enkelt arv, multipel arv, multilevel arv, hierarkisk arv og hybridarv.Polymorfisme kan være en kompileringstidspolymorfisme (overbelastning) eller run-time polymorfisme (overordnet).
EksempelKlassebordet kan arve klassen 'møbler', da et 'bord' er et 'møbler'.Klassen 'study_table' kan også have funktion 'set_color ()' og en klasse 'Dining_table' kan også have funktion 'set_color ()', så hvilken form for set_color () -funktionen at påberåbe kan afgøres både, kompilere tid og løbe tid.

Definition af arv:

Arv er et af de afgørende træk ved OOP, som stærkt understøtter "genbrug". Genbrugelighed kan beskrives som at skabe en ny klasse ved at genbruge egenskaberne af den eksisterende klasse. I arv er der en grundklasse, som er arvet af den afledte klasse. Når en klasse arver en anden klasse, bliver medlemmerne af grundklassen medlem (er) af en afledt klasse.

Den generelle form for at arve en klasse er som følger:

 klasse afledt klasse-navn: access-specifier base-class-navn {// legeme af klassen}; 

Her giver adgangspersonalet adgangstilstanden (privat, offentlig, beskyttet) til medlemmet / medlemmerne i basisklassen til den afledte klasse. Hvis der ikke er adgangsspecifikator til stede, betragtes den som "privat" som standard. I C ++, hvis den afledte klasse er "struct", er adgangsspecifikatoren "offentlig" som standard.

I C ++ kan arv opnås i fem former. De kan klassificeres som: -

  • Enkelt Arv (kun en superklasse)
  • Flere arv (flere superklasser)
  • Hierarkisk arv (en super klasse, mange underklasser)
  • Flere arv (afledt af en afledt klasse)

I Java arver klassen den anden klasse ved at bruge søgeordet "udvides". I Java klassificeres basisklassen som en superklasse, og afledt klasse henvises til som en underklasse. En underklasse kan ikke få adgang til de medlemmer af basisklassen, der erklæres som "private". Den generelle form, der arver klassen i Java, er som følger.

 klasse afledt klasse-navn udvider base-class-navn {// legeme af klassen}; 

Java understøtter ikke arv af flere arv, mens den understøtter multilevel hierarki. I Java kan nogle superklasse måske skjule dens implementeringsdetaljer, og det gør en del af disse data "private". Som i Java kan en underklasse ikke få adgang til de private medlemmer af superklassen, og hvis en underklasse ønsker at få adgang til eller initialisere disse medlemmer, giver Java en løsning. Underklassen kan henvise medlemmerne af sin umiddelbare superklasse ved at bruge et søgeord "super". Husk, du kan kun få adgang til medlemmerne af den umiddelbare superklasse.

"Super" har to generelle former. Den første er, det bruger til at ringe til superklasse-konstruktøren. Det andet er at få adgang til medlemmet af superklassen, der er blevet skjult af medlemmet af underklassen.

 // første form for at ringe til konstruktøren. klasse supper_class {supper_class (argument_list) {..} // konstruktør af super klasse}; klasse sub_class udvider supper_class {sub_class (argument_list) {..} // konstruktør af sub_class super (argument_list); // sub_class kalder konstruktøren i superklasse}}; 
 // sekund for af 'super' klasse supper_class {int i; } klasse sub_class udvider supper_class {int i; sub_class (int a, int b) {super.i = a; // 'jeg' af superklasse i = b; // 'i' af underklasse}}; 

Definition af polymorfisme

Betegnelsen polymorfisme betyder simpelthen 'en funktion, flere former'. Polymorfisme opnås ved både kompileringstid og løbetid. Kompileringstidspolymorfismen opnås gennem "overbelastning", mens løbetidspolymorfismen opnås gennem "tvingende".

Polymorfismen gør det muligt for objektet at bestemme "hvilken form for den funktion, der skal påberåbes, når" både, kompilere tid og løbe tid.
Lad os diskutere det første koncept for overbelastning. Ved overbelastning definerer vi en funktion i klassen mere end én gang med forskellige, datatype og antallet af parametere, mens den funktion, der skal overbelastes, skal have samme returtype. De fleste gange er funktionerne til de overbelastede konstruktører af klassen.

 klasse overbelastning {int a, b; offentlige: int overload (int x) {// første overload () constructor a = x; returnere a; } int overload (int x, int y) {// anden overload () constructor a = x; b = y; returnere a * b; }}; int main () {overload O1; O1.overload (20); // første overload () konstruktoropkald O1.overload (20, 40); // anden overbelastning () konstruktøropkald} 

Lad os nu diskutere den anden form for polymorfisme, dvs. tvingende. Begrebet tvingende kan kun implementeres til klassens funktion, som også implementerer begrebet arv. I C ++ foregår den funktion, der skal overskrides, af søgeordet "virtuel" i basisklassen og omdefineres i den afledte klasse med samme prototype bortset fra søgeordet "virtuelt".

 klassebase {public: virtual void funct () {// virtuelle funktion af base klasse cout << "Dette er en base klasse funct ()"; }}; klasse derived1: public base {public: void funct () {// virtuelle funktion af base klasse omdefineret i derived1 class cout 

Nøgleforskelle mellem arv og polymorfisme

  1. Arv skaber en klasse, der henter sin egenskab fra en allerede eksisterende klasse. På den anden side er polymorfisme en grænseflade, der kan defineres i flere former.
  2. Arv er implementeret på klasserne, mens polymorfismen implementeres på metoder / funktioner.
  3. Som arv gør det muligt for en afledt klasse at anvende de elementer og metoder, der er defineret i basisklassen, behøver den afledte klasse ikke at definere disse elementer eller metode det igen, så vi kan sige det øger kodegenbrug og dermed reducerer kodenes længde . På den anden side gør polymorfisme det muligt for en genstand at bestemme hvilken form for den metode, den ønsker at påberåbe sig på både kompileringstid og løbetid.
  4. Arven kan klassificeres som enkelt arv, multipel arv, multilevel arv, hierarkisk arv og hybridarv. På den anden side klassificeres polymorfisme som overbelastning og overordnet.

Konklusion:

Arv og polymorfisme er indbyrdes forbundne begreber, da den dynamiske polymorfisme gælder for de klasser, der også implementerer begrebet arv.

Top