Rekommenderas, 2024

Redaktionen

Skillnad mellan arv och polymorfism

Arv tillåter, kodåteranvändning och polymorfismen är förekomsten av en funktion med annan form. Den grundläggande skillnaden mellan arv och polymorfism är att arv tillåter att den redan existerande koden återanvänds i ett program, och polymorfismen ger en mekanism för att dynamiskt bestämma vilken form av en funktion som ska åberopas.

Jämförelsediagram

Grunder för jämförelseArvpolymorfism
GrundläggandeErfarenhet skapar en ny klass med egenskaperna hos den redan befintliga klassen.Polymorfism är i grunden ett vanligt gränssnitt för flera former.
GenomförandeErfarenhet är i princip genomförd på klasser.Polymorfismen är i grund och botten implementerad på funktion / metoder.
Använda sig avAtt stödja konceptet om återanvändning i OOP och minskar kodens längd.Tillåter att objektet bestämmer vilken form av funktion som ska åberopas när, vid kompileringstid (överbelastning) samt körtid (överordnad).
formulärArv kan vara ett enda arv, flera arv, flera arv, hierarkiskt arv och hybridarv.Polymorfism kan vara en kompileringstidspolymorfism (överbelastning) eller run-time polymorfism (överordnad).
ExempelKlassens bord kan ärva klassens "möbler", eftersom ett "bord" är ett "möbler".Klassen 'study_table' kan också ha funktion 'set_color ()' och en klass 'Dining_table' kan också ha funktion 'set_color ()' så, vilken form av set_color () -funktionen att åberopa kan avgöra både, kompilera tid och körtid.

Definition av arv:

Arv är en av de viktigaste egenskaperna hos OOP, som starkt stöder "återanvändbarhet". Återanvändbarhet kan beskrivas som att skapa en ny klass genom att återanvända egenskaperna hos den befintliga klassen. I arv finns en grundklass som är ärvad av den härledda klassen. När en klass ärver någon annan klass blir medlemmen i basklassen medlem (erna) av en härledd klass.

Den allmänna formen av att ärva en klass är följande:

 klass avledt klass-namn: access-specifier basklassnamn {// kropp av klassen}; 

Här tillhandahåller åtkomstspecifikationen tillgången (privat, allmän, skyddad) till medlemmen / medlemmarna i basklassen till den härledda klassen. Om ingen åtkomstspecifikator är närvarande, anses den som "privat" som standard. I C ++, om den härledda klassen är "struct" är åtkomstspecifikationen "allmän" som standard.

I C ++ kan arv uppnås i fem former. De kan klassificeras som: -

  • Single Arv (endast en superklass)
  • Multipla arv (flera superklasser)
  • Hierarkisk arv (en superklass, många underklasser)
  • Multipla arv (härledd från en härledd klass)

I Java ärar klassen den andra klassen med hjälp av sökordet "sträcker sig". I Java klassificeras basklassen som en superklass, och härledd klass hänvisas till som en underklass. En underklass kan inte komma åt de medlemmarna av basklassen, som deklareras som "privata". Den allmänna form som ärar i klassen i Java är som följer.

 klass avledda klassnamn utökar basklassnamn {// kropp av klassen}; 

Java stöder inte arvet av flera arv, medan det stöder flera nivåer hierarki. I Java kan ibland en superklass vilja dölja dess implementeringsdetaljer, och det gör en del av dataen "privat". Som i Java kan en underklass inte nå de privata medlemmarna i superklassen och om en underklass vill komma åt eller initiera dessa medlemmar, ger Java en lösning. Underklassen kan hänvisa medlemmarna till sin omedelbara superklass genom att använda ett sökord "super". Kom ihåg att du bara kan få tillgång till medlemmarna i den omedelbara superklassen.

"Super" har två generella former. Den första är, det brukar kalla konstruktören i superklassen. Den andra är att få tillgång till medlemmen av superklassen som har dolts av medlemmen av underklassen.

 // första form av att ringa konstruktören. class supper_class {supper_class (argument_list) {..} // konstruktör av superklass}; klassen sub_class sträcker supper_class {sub_class (argument_list) {..} // konstruktör av sub_class super (argument_list); // sub_class kallar konstruktören i superklass}}; 
 // sekund för av "super" klassen supper_class {int i; } klass sub_class sträcker supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' av superklassen i = b; // 'i' av underklassen}}; 

Definition av polymorfism

Termen polymorfism betyder helt enkelt "en funktion, flera former". Polymorfism uppnås vid både kompileringstid och körtid. Kompileringstidspolymorfismen uppnås genom "överbelastning", medan körtidspolymorfismen uppnås genom "övergripande".

Polymorfismen tillåter objektet att bestämma "vilken form av funktionen som ska åberopas när" både kompilera tid och körtid.
Låt oss diskutera det första begreppet överbelastning. Vid överbelastning definierar vi en funktion i klassen mer än en gång med olika, datatyp och antalet parametrar medan funktionen som ska överbelastas måste ha samma returtyp. De flesta gånger är funktionerna till överbelastade konstruktörer av klassen.

 klassöverbelastning {int a, b; allmän: int överbelastning (int x) {// första överbelastning () konstruktör a = x; returnera a; } int överbelastning (int x, int y) {// andra överbelastning () konstruktor a = x; b = y; returnera a * b; }}; int main () {överbelastning O1; O1.overload (20); // första överbelastning () konstruktörsamtal O1.overload (20, 40); // andra överbelastnings () konstruktörsamtal} 

Låt oss nu diskutera den andra formen av polymorfism, dvs tvingande. Begreppet tvingande kan endast genomföras till klassens funktion, som också implementerar begreppet arv. I C ++ föregås den funktion som ska överskridas av sökordet "virtuellt" i basklassen och omdefinieras i den härledda klassen med samma prototyp förutom sökordet "virtuellt".

 klassbas {public: virtual void funct () {// virtuell funktion av basklass cout << "Detta är en basklass funct ()"; }}; klass derived1: public base {public: void funct () {// virtuell funktion av basklass omdefinierad i derived1 class cout 

Viktiga skillnader mellan arv och polymorfism

  1. Erfarenhet skapar en klass som hämtar sin funktion från en redan befintlig klass. Å andra sidan är polymorfism ett gränssnitt som kan definieras i flera former.
  2. Erfarenhet genomförs på klasserna, medan polymorfismen implementeras på metoder / funktioner.
  3. Eftersom arv tillåter en härledd klass att använda de element och metoder som definieras i basklassen behöver den härledda klassen inte definiera dessa element eller metod det igen så vi kan säga att det ökar kodåteranvändningen och därmed minskar kodens längd . Å andra sidan gör polymorfismen det möjligt för ett objekt att bestämma vilken form av metoden den vill använda på både kompileringstid och körtid.
  4. Arvet kan klassificeras som ett arv, flera arv, flera arv, hierarkiskt arv och hybridarv. Å andra sidan klassificeras polymorfismen som överbelastning och överordnad.

Slutsats:

Arv och polymorfism är sammanhängande begrepp, eftersom den dynamiska polymorfismen gäller de klasser som också implementerar begreppet arv.

Top