Ieteicams, 2024

Redaktora Izvēle

Starpība starp mantojumu un polimorfismu

Mantojums pieļauj, kodu atkārtota izmantošana un polimorfisms ir vienas funkcijas parādīšanās ar atšķirīgu formu. Galvenā atšķirība starp mantojumu un polimorfismu ir tāda, ka mantojums ļauj jau esošajam kodam atkārtoti izmantot programmu, un polimorfisms nodrošina mehānismu, lai dinamiski izlemtu, kāda veida funkcija jāizmanto.

Salīdzinājuma diagramma

Salīdzinājuma pamatsMantojumsPolimorfisms
PamataMantojums rada jaunu klasi, izmantojot jau esošās klases īpašības.Polimorfisms būtībā ir kopēja saskarne daudzveidīgai formai.
ĪstenošanaMantojums pamatā tiek īstenots klasēs.Polimorfisms pamatā tiek īstenots ar funkciju / metodēm.
IzmantotAtbalstīt atkārtotas izmantošanas koncepciju OOP un samazina koda garumu.Ļauj objektam izlemt, kāda veida funkcija jāizmanto, kad kompilēšanas laikā (pārslodze), kā arī palaišanas laiks (sevišķi svarīgs).
VeidlapasMantojums var būt viens mantojums, vairākkārtējs mantojums, daudzlīmeņu mantojums, hierarhisks mantojums un hibrīds mantojums.Polimorfisms var būt kompilēšanas laika polimorfisms (pārslodze) vai palaišanas laika polimorfisms (sevišķi svarīgs).
PiemērsKlases "galds" var mantot klases "mēbeles" iezīmi, jo "galds" ir "mēbeles".Klasei 'study_table' var būt arī funkcija "set_color ()", un klasē "Dining_table" var būt arī funkcija "set_color ()", tāpēc, kurā formā set_color () var atsaukties, var izlemt gan kompilēšanas laiku, gan izpildes laiks.

Mantojuma definīcija:

Mantojums ir viena no OOP būtiskajām iezīmēm, kas stingri atbalsta „atkārtotu izmantošanu”. Atkārtojamību var raksturot kā jaunas klases radīšanu, atkārtoti izmantojot esošās klases īpašības. Mantojumā pastāv bāzes klase, ko pārmanto atvasinātā klase. Ja klase mantos jebkuru citu klasi, bāzes klases dalībnieks (-i) kļūst par atvasinātās klases (-u) dalībnieku (-iem).

Klases vispārējā mantojuma forma ir šāda:

 klases atvasinātās klases nosaukums: piekļuves specifieris bāzes klases nosaukums {// klases ķermenis}; 

Šeit piekļuves specifikators nodrošina piekļuves veidu (privāto, publisko, aizsargāto) bāzu klases dalībniekam (-iem) atvasinātajai klasei. Ja nav pieejams neviens piekļuves specifikators, tas pēc noklusējuma tiek uzskatīts par “privātu”. C + +, ja atvasinātā klase ir “struct”, tad piekļuves specifikators pēc noklusējuma ir “publisks”.

C + + mantojumu var sasniegt piecās formās. Tos var klasificēt kā: -

  • Viena mantojuma (tikai viena superklase)
  • Vairāki mantojumi (vairākas augstākās klases)
  • Hierarhiskā mantošana (viena super klase, daudzas apakšklases)
  • Vairāki mantojumi (iegūti no atvasinātās klases)

Java, klase manto citu klasi, izmantojot atslēgvārdu "paplašina". Java, bāzes klasi sauc par super klasi, un atvasinātā klase tiek saukta par apakšklasi. Apakšklase nevar piekļūt tiem bāzes klases dalībniekiem, kuri tiek pasludināti par “privātiem”. Vispārējā veidlapa, kas pārmanto klasi Java, ir šāda.

 klases atvasinātās klases nosaukums paplašina bāzes klases nosaukumu {// klases nosaukums}; 

Java neatbalsta vairāku mantojumu mantojumu, bet tā atbalsta daudzlīmeņu hierarhiju. Java, dažreiz super klases var vēlēties slēpt tās īstenošanas detaļas, un tas padara daļu no šiem datiem "privāti". Tāpat kā Java, apakšklase nevar piekļūt privātajām klasēm, un ja apakšklase vēlas piekļūt šiem dalībniekiem vai tos inicializēt, tad Java nodrošina risinājumu. Apakšklase var nodot tās tiešās klases dalībniekus, izmantojot atslēgvārdu “super”. Atcerieties, ka varat piekļūt tikai tiešās klases skolēniem.

“Super” ir divas vispārīgas formas. Pirmais ir tas, ko izmanto, lai izsauktu super klases konstruktoru. Otrs ir, lai piekļūtu superklases dalībniekam, kuru ir paslēpusi apakšklases biedrs.

 // pirmais konstruktora izsaukšanas veids. klases supper_class {supper_class (argument_list) {..} // super klases konstruktors}; klases sub_class paplašina supper_class {sub_class (argument_list) {..} // / sub_class super konstruktoru (argumentu saraksts); // sub_class aicina super klases konstruktoru}}; 
 // otrās klases “super” klases supper_class {int i; } klases sub_class paplašina supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' no super klases i = b; // 'i' apakšgrupā}}; 

Polimorfisma definīcija

Termins polimorfisms vienkārši nozīmē "viena funkcija, vairākas formas". Polimorfisms tiek panākts gan kompilēšanas laikā, gan izpildes laikā. Kompilācijas laika polimorfisms tiek sasniegts, izmantojot „pārslodzi”, savukārt palaišanas laika polimorfisms tiek sasniegts ar “sevišķi svarīgu”.

Polimorfisms ļauj objektam izlemt, „kāda veida funkcija jāizmanto, kad” gan kompilēt laiku, gan laiku.
Apspriedīsim pirmo pārslodzes koncepciju. Pārslodzes gadījumā mēs definējam funkciju klasē vairāk nekā vienu reizi ar atšķirīgu datu tipu un parametru skaitu, savukārt pārslogotajai funkcijai jābūt vienādam atgriešanas veidam. Lielākoties pārslodzes funkcijas ir klases konstruktori.

 klases pārslodze {int a, b; public: int overload (int x) {// pirmais pārslodzes () konstruktors a = x; atgriezties a; } int pārslodze (int x, int y) {// otrais pārslodzes () konstruktors a = x; b = y; atgriezties a * b; }}; int main () {pārslodze O1; O1.overload (20); // pirmais pārslodzes () konstruktora izsaukums O1.overload (20, 40); // otrais pārslodzes () konstruktora zvans} 

Tagad, diskutēsim par otro polimorfisma veidu, proti, par svarīgāko. Svarīgākās koncepcijas var īstenot tikai to klašu funkcijai, kuras arī īsteno mantojuma jēdzienu. C + + pirms pārslēgtās funkcijas sākas atslēgas vārds “virtuāls” bāzes klasē un no jauna definēts atvasinātajā klasē ar to pašu prototipu, izņemot atslēgvārdu “virtuāls”.

 class base {public: virtual void funct () {// bāzes klases cout virtuālā funkcija << "Šī ir bāzes klases funkcija (); }}; klases atvasinājums1: publiskā bāze {public: void funct () {// bāzes klases virtuālā funkcija, kas no jauna definēta atvasinātā 1 klases coutā 

Galvenās atšķirības starp mantojumu un polimorfismu

  1. Mantojums rada klasi, kas iegūst savu iezīmi no jau esošas klases. No otras puses, polimorfisms ir interfeiss, ko var definēt vairākos veidos.
  2. Mantojums tiek īstenots klasēs, bet polimorfisms tiek īstenots ar metodēm / funkcijām.
  3. Tā kā mantojums atvasinātajai klasei ļauj izmantot bāzes klasē definētos elementus un metodes, atvasinātajai klasei šie elementi nav jādefinē vai tā vēlreiz jādefinē, tāpēc varam teikt, ka tas palielina kodu atkārtotu izmantojamību un līdz ar to samazina koda garumu. . No otras puses, polimorfisms ļauj objektam izlemt, kāda veida metode tā vēlas izmantot gan kompilēšanas laikā, gan izpildes laikā.
  4. Mantojumu var klasificēt kā vienu mantojumu, vairāku mantojumu, daudzlīmeņu mantojumu, hierarhisku mantojumu un hibrīda mantojumu. No otras puses, polimorfisms ir klasificēts kā pārslodze un sevišķi svarīga.

Secinājums:

Mantojums un polimorfisms ir savstarpēji saistīti jēdzieni, jo dinamiskais polimorfisms attiecas uz klasēm, kas arī īsteno mantojuma jēdzienu.

Top