Razlika između preopterećenja funkcije i preglasavanja u C ++

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 11 Svibanj 2024
Anonim
Razlika između preopterećenja funkcije i preglasavanja u C ++ - Tehnologija
Razlika između preopterećenja funkcije i preglasavanja u C ++ - Tehnologija

Sadržaj


U 'preopterećenje'Redefiniramo preopterećene funkcije s istim nazivom funkcije, ali različitim brojem i vrstom parametara. U 'najvažniji„Prototip prekobrojene funkcije je isti u cijelom programu, ali funkciji koja će se nadjačati prethodi ključna riječ„ virtualni “u osnovnoj klasi i redefinira je izvedenom klasom bez ikakve ključne riječi.

Polimorfizam je jedno od ključnih obilježja OOP-a. To jednostavno znači "koristiti jedno ime za više oblika". Polimorfizam se može provesti pomoću "preopterećenja funkcije", "preopterećenja operatora" i "virtualne funkcije". I jedno i drugo, 'preopterećenje' i 'preglasavanje' podrazumijeva pojam polimorfizma. Ovdje je "preopterećenje" vremenski polimorfizam, a "prekomjerno prenošenje" je polimorfizam u trajanju. Proučavajući dalje, ako govorimo o glavnoj razlici u "preopterećenju" i "preglasavanju".


Nadalje, proučavamo razliku između preopterećenja i prevladavanja pomoću usporednog grafikona.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. sličnosti
  5. Zaključak


Uporedni grafikon:

Osnove za usporedbupreopterećenjenajvažniji
PrototipPrototip se razlikuje jer se broj ili vrsta parametra mogu razlikovati.Svi aspekti prototipa moraju biti isti.
RiječTijekom preopterećenja nije primijenjena nijedna ključna riječ.Funkciji koju treba nadjačati prethodi ključna riječ virtualna, u osnovnoj klasi.
Razlikujući faktorBroj ili vrsta parametra razlikuje se što određuje da se poziva inačica funkcije.Koja se funkcija klasa zove pokazivačem, određuje se adresom klase objekta koja je dodijeljena tom pokazivaču.
Definiranje uzorkaFunkcije su redefinirane istim nazivom, ali različitim brojem i vrstom parametra.Funkcija je definirana, a prethodi joj ključna riječ virtual u glavnoj klasi i redefinira izvedena klasa s ključnom riječi.
Vrijeme ostvarenjaVrijeme sastavljanja.Vrijeme izvođenja.
Konstruktor / Virtualna funkcijaKonstruktori se mogu preopteretiti.Virtualna funkcija može se nadjačati.
peć za sagorijevanje otpadaka
Destruktor se ne može preopteretiti.Destruktor se može nadjačati.
vezivanjePreopterećenjem se postiže rano vezivanje.Nadjačaj se odnosi na kasno vezivanje.


Definicija preopterećenja

Polimorfizam u kompilacijskom vremenu naziva se "preopterećenje." Kako se preopterećenje generira iz koncepta polimorfizma, on daje "zajedničko sučelje za više metoda". To znači, ako je funkcija preopterećena, ona sadrži isti naziv funkcije dok je redefinirana.

Preopterećene funkcije razlikuju se u odnosu na, različit 'broj ili vrstu parametara (-a)', to razlikuje jednu preopterećenu funkciju od druge. Na ovaj način, prevoditelj prepoznaje koja se preopterećena funkcija poziva. Najčešće preopterećene funkcije su 'konstruktori'. Konstruktor kopiranja vrsta je "preopterećenja konstruktora".

Provedba preopterećenja u C ++

preopterećenje klase {int a, b; public: int load (int x) {// funkcija prvog opterećenja () a = x; vratiti a; } int load (int x, int y) {// druga funkcija load () a = x; b = y; vratiti a * b; }}; int main () {preopterećenje O1; O1.load (20); // prvi poziv () funkcije poziva na O1.load (20,40); // drugi poziv () funkcije poziva}

Ovdje je opterećenje funkcije () klase preopterećeno. Dvije preopterećene funkcije klase mogu se razlikovati na način da prva funkcija load () prihvaća samo jedan cjelobrojni parametar, dok druga load () funkcija prihvaća dva cjelobrojna parametra. Kad objekt preklapanja klase poziva funkciju load () s jednim parametrom, poziva se funkcija first load (). Kad objekt poziva funkciju load () koja prolazi dva parametra, poziva se funkcija second load ().

Definicija prevladavanja

Polimorfizam koji se postiže za vrijeme izvođenja naziva se "prevladavanjem". To se postiže korištenjem "nasljeđivanja" i "virtualnih funkcija". Funkciji koja će se nadjačati prethodi ključna riječ "virtualni" u osnovnoj klasi i redefinira u izvedenom razredu bez ikakve ključne riječi.

Jedna od najvažnijih stvari koje treba imati na umu u slučaju preglasavanja je da se prototip nadjačane funkcije ne smije mijenjati, dok izvedeno klasa to redefinira. Kad se preglasanoj funkciji dodijeli poziv, C ++ određuje koja se inačica funkcije naziva na temelju "vrste objekta koju pokazuje pokazivač" kojom se vrši pozivanje funkcije.

Primjena presudnog u C ++

klasa baza {public: virtual void funct () {// virtualna funkcija cout baze klase << "Ovo je funkcija class class base ()"; }}; klasa izvedena1: javna baza {public: void funct () {// virtualna funkcija osnovne klase redefinirana u izvedenom1 razredu cout << "Ovo je izvedena1 klasa funct ()"; }}; klasa izveden2: javna baza {public: void funct () {// virtualna funkcija osnovne klase redefinirana u izvedenom razredu cout << "Ovo je izveden2 klase funct ()"; }}; int main () {baza * p, b; izveden1 d1; izvedeni2 d2; * P = b; p> Funct (); // poziv na funkciju osnovne klase (). * P = d1; p> Funct (); // poziv na izvedenu funkciju klase1 (). * P = d2; p> Funct (); // poziv na izvedenu funkciju klase2 (). vratiti 0; }

Ovdje postoji jedna osnovna klasa koju javno nasljeđuju dvije izvedene klase. Virtualna funkcija definirana je u osnovnoj klasi s ključnom riječi "virtualna", a redefinira je obje izvedene klase bez ključne riječi. U main (), osnovna klasa stvara varijablu pointera 'p' i objekt 'b'; Klasa 'izveden1' stvara objekt d1, a klasa izveden2 stvara objekt d2 '.

Sada je u početku adresa objekta 'b' osnovne klase dodijeljena pokazivaču osnovne klase 'p'. 'P' poziva funkciju funkcije (), pa se poziva funkcija osnovne klase.Tada je adresa izvedenog objekta klase 'd1' dodijeljena pokazivaču 'p', a opet daje poziv funkciji (); ovdje se izvršava funkcija funct () izvedene1 klase. Konačno, pokazivač 'p' dodijeljen je objektu izvedene klase2. Zatim 'p' poziva funkciju funct () koja izvršava funkciju funct () klase izvedenice2.

Ako izveden1 / izveden2 klasa ne redefinira funkciju (), tada bi funkciju () osnovne klase nazvali, jer je virtualna funkcija "hijerarhijska".

  1. Prototip funkcije koja se preopterećuje razlikuje se zbog vrste i broja parametara koji su proslijeđeni preopterećenoj funkciji. S druge strane, prototip nadjačane funkcije se ne mijenja, jer izvršena funkcija vrši različite radnje za različite klase kojima pripada, ali s istom vrstom i brojem parametara.
  2. Preopterećeno ime funkcije ne prethodi nijednoj ključnoj riječi, dok naziv prenapunjene funkcije prethodi samo ključu "Virtual" samo u osnovnoj klasi.
  3. Koja se preopterećena funkcija poziva, ovisi o vrsti ili broju parametra koji su proslijeđeni funkciji. Zamijenjena funkcija klase koja se poziva ovisi o tome koja je adresa objekta klase dodijeljena pokazivaču koji je pozvao funkciju.
  4. Koja preopterećena funkcija koju treba pozvati rješava se tijekom kompiliranja. Koja poništena funkcija koju treba pozvati rješava se tijekom izvođenja.
  5. Konstruktori se mogu preopteretiti, ali ne mogu se preopteretiti.
  6. Destruktori se ne mogu preopteretiti, ali mogu se nadjačati.
  7. Preopterećenjem se postiže rano vezivanje, jer će se pozvati preopterećena funkcija koja je riješena za vrijeme sastavljanja. Nadjačavanjem se postiže kasno vezivanje, jer će se nadjačati funkcija koja se preispituje tijekom rješavanja.

sličnosti

  1. Oboje se primjenjuju na funkcije članova klase.
  2. Polimorfizam je osnovni koncept koji stoji iza njih dvojice.
  3. Naziv funkcije ostaje isti dok primjenjujemo preopterećenje i preglasavanje funkcija.

Zaključak

Čini se da je preopterećenje i preglasavanje slično, ali to nije slučaj. Funkcije se mogu preopteretiti, ali bilo koja klasa ne može dodatno redefinirati preopterećenu funkciju u budućnosti. Virtualna funkcija ne može se preopteretiti; mogu se samo nadjačati.