Ieteicams, 2024

Redaktora Izvēle

Starpība starp funkciju pārslodzi un ignorēšanu C + +

Polimorfisms ir viena no OOP būtiskajām iezīmēm. Tas vienkārši nozīmē „izmantot vienu vārdu vairākām veidlapām”. Polimorfismu var īstenot, izmantojot “funkciju pārslodzi”, “operatora pārslodzi” un “virtuālo funkciju”. Gan "pārslodze", gan "sevišķi svarīga" nozīmē polimorfisma jēdzienu. Šeit "pārslodze" ir kompilēšanas laika polimorfisms un "primārā" ir palaist laika polimorfisms. Turpinot mācīties, ja mēs runājam par lielāko atšķirību „pārslodzē” un “primārajā”. “Pārslodzes” gadījumā mēs pārvērtējam pārslogotās funkcijas ar tādu pašu funkcijas nosaukumu, bet atšķirīgu skaitu un parametru veidu. Programmas “overriding” prototips ir vienāds visā programmā, bet pirms pārslēgtās funkcijas pirms atslēgas vārda “virtuāls”, un atvasinātā kategorija to definē bez atslēgvārdiem.

Turklāt mēs pētām atšķirību starp pārslodzi un svarīgāko ar salīdzinājuma diagrammas palīdzību.


Salīdzināšanas diagramma:

Salīdzinājuma pamatsPārslodzePārspīlējums
PrototipsPrototips atšķiras, jo parametru skaits vai veids var atšķirties.Visiem prototipa aspektiem jābūt vienādiem.
AtslēgvārdsNav pārsūtīšanas laikā izmantots neviens atslēgvārds.Funkcijai, kas ir jānovērš, pirms atslēgas vārda ir “virtuāls”.
Atšķirības faktorsParametru skaits vai veids atšķiras, kas nosaka funkcijas versiju.Kuras klases funkcijas izsauc rādītājs, nosaka tā adreses adrese, kas tiek piešķirta šim rādītājam.
Raksta definēšanaFunkcija tiek atkārtoti definēta ar tādu pašu nosaukumu, bet atšķirīgs skaitlis un parametru veids.Funkcija ir definēta, pirms tā ir atslēgas vārds “virtuāls” galvenajā klasē un no jauna definēts pēc atvasinātās klases ar atslēgvārdu.
Izpildes laiksApkopot laiku.Palaist laiku.
Konstruktors / virtuālā funkcijaKonstruktori var tikt pārslogoti.Virtuālo funkciju var ignorēt.
Destruktors
Destruktoru nevar pārslogot.Destruktoru var ignorēt.
SaistošsPārslodze sasniedz agrīnu iesaisti.Sevišķi svarīga ir novēlota saistība.

Pārslodzes definīcija

Kompilācijas laika polimorfismu sauc par „pārslodzi”. Tā kā pārslodze rodas no polimorfisma jēdziena, tā nodrošina „kopīgu saskarni vairākām metodēm”. Tas nozīmē, ka, ja funkcija ir pārslogota, tā satur to pašu funkcijas nosaukumu, kamēr tā tiek atkārtoti definēta.

Pārslodzes funkcijas atšķiras attiecībā uz atšķirīgu “parametru (-u) skaitu vai veidu”, tas padara vienu pārslogotu funkciju atšķirīgu no citas. Tādā veidā kompilators atpazīst, kura pārslodzes funkcija tiek izsaukta. Visbiežāk pārslogotās funkcijas ir “konstruktori”. “Kopēšanas konstruktors” ir sava veida “konstruktora pārslodze”.

Pārslodzes ieviešana C ++

 klases pārslodze {int a, b; publiski: int slodze (int x) {// pirmā slodze () funkcija a = x; atgriezties a; } int slodze (int x, int y) {// otrā slodze () funkcija a = x; b = y; atgriezties a * b; }}; int main () {pārslodze O1; O1.load (20); // pirmās slodzes () funkcija zvans O1.load (20, 40); // otrās slodzes () funkciju zvans} 

Šeit ir pārslogota klases pārslodzes funkcija (). Divas klases pārslogotās funkcijas var atšķirt tādā veidā, ka pirmā slodzes () funkcija pieņem tikai vienu veselu skaitļa parametru, bet otrā slodzes () funkcija pieņem divus veselu skaitļa parametrus. Ja klases pārslodzes objekts nosūta slodzes () funkciju ar vienu parametru, tiek saņemta pirmā slodzes () funkcija. Kad objekta zvani slodzes () funkcija iet divus parametrus, otrā slodze () tiek izsaukta.

Pārspīlējuma definīcija

Laika gaitā sasniegto polimorfismu sauc par “primāru”. Tas tiek paveikts, izmantojot “mantojumu” un “virtuālās funkcijas”. Pārslēgtā funkcija pirms atslēgvārdu ir atslēgvārdu “virtuāls” un no jauna definēta atvasinātā klasē bez atslēgvārdiem.

Viena no svarīgākajām lietām, kas jāatceras, ir svarīgākais, ka pārslēgtās funkcijas prototips nedrīkst mainīties, kamēr atvasinātā klase to pārveido. Ja tiek dota zvana pārsniegta funkcija, C ++ nosaka, kura funkcijas versija tiek saukta, pamatojoties uz “objekta tipu, ko norāda rādītājs”, ar kuru tiek veikta funkcijas izsaukšana.

Pārspīlējuma īstenošana C + +

 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ātajā klasē cout << "Tas ir atvasināts1 klases uzdevums ()"; }}; klases atvasinājums2: publiskā bāze {public: void funct () {// bāzes klases virtuālā funkcija, kas no jauna definēta atvasinātā 2 klases coutā  funkt (); // izsaukums uz atvasināto1 klases funkciju (). * p = & d2; p-> funct (); // izsaukums uz atvasināto2 klases funkciju (). atgriešanās 0; } 

Šeit ir viena bāzes klase, ko publiski pārmanto divas atvasinātas klases. Virtuālā funkcija ir definēta bāzes klasē ar atslēgvārdu “virtuāls”, un to no jauna definē abas atvasinātās klases bez atslēgvārdiem. Galvenajā () bāzes klasē tiek izveidots rādītāja mainīgais lielums “p” un objekts “b”; “atvasinātā1” klase rada objektu d1, un atvasinātā2 klase rada objektu d2 '.

Sākotnēji bāzes klases objekta "b" adrese tiek piešķirta bāzes klases "p" rādītājam. “p” zvans uz funkciju funct (), tāpēc tiek saukta bāzes klases funkcija. Pēc tam atvasinātā 1 klases objekta "d1" adrese tiek piešķirta rādītājam "p", atkal tā dod aicinājumu darboties (); šeit tiek izpildīta atvasinātās klases 1 funkcija (). Visbeidzot, rādītājs "p" ir piešķirts atvasinātās 2 klases objektam. Tad "p" aicina funkciju funct (), kas izpilda atvasinātās klases 2 funkciju ().

Ja atvasinātā1 / atvasinātā 2 klase nav atkārtoti funkcionēta (), tad bāzes klases funkcija () būtu tikusi aicināta, jo virtuālā funkcija ir “hierarhiska”.

Galvenās atšķirības starp pārslodzi un pārsvaru

  1. Pārslodzes funkcijas prototips atšķiras atkarībā no pārslodzes funkcijai nodotā ​​parametra veida un skaita. No otras puses, pārslēgtās funkcijas prototips nemainās, jo pārslēgta funkcija veic dažādas darbības dažādai klasei, bet tai ir tāda paša tipa un parametru skaits.
  2. Pārslodzes funkcijas nosaukums nav pirms kāda atslēgvārda, bet pārslēgtās funkcijas nosaukums ir tikai pirms atslēgas “Virtual” bāzes klasē.
  3. Kura pārslogotā funkcija tiek izmantota, ir atkarīga no funkcijas parametra veida vai skaita. Pārvirzītā funkcija, kuras klasē tiek izmantota, ir atkarīga no tā, kura klases objekta adrese ir piešķirta rādītājam, kas izmantoja šo funkciju.
  4. Kura pārslodzes funkcija tiek izmantota, tiek atrisināta kompilēšanas laikā. Kura pārsniegta funkcija tiek atrisināta runtime laikā.
  5. Konstruktorus var pārslogot, bet tos nevar ignorēt.
  6. Destruktori nevar tikt pārslogoti, bet tos var ignorēt.
  7. Pārslodze sasniedz agrīnu iesaisti, jo pārslodzes funkcija tiks izmantota, tiek atrisināta kompilēšanas laikā. Pārspīlējums sasniedz novēlotu saistīšanu, jo to, kura pārsniegta funkcija tiks izmantota, tiek atrisināta izpildīšanas laikā.

Līdzības

  1. Abi tiek piemēroti klases dalībnieku funkcijām.
  2. Polimorfisms ir abu pušu pamatkoncepcija.
  3. Funkcijas nosaukums paliek tāds pats, kamēr mēs izmantojam pārslodzi un ignorējam funkcijas.

Secinājums

Pārslodze un svarīgums šķiet līdzīgi, bet tā nav. Funkcijas var pārslogot, bet jebkura klase nevar tālāk definēt pārslogoto funkciju. Virtuālo funkciju nevar pārslogot; tos var ignorēt.

Top