Funcția de supraîncărcare în C ++: tot ce trebuie să știți



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare a supraîncărcării funcției în C ++, cu o mulțime de exemple de înțeles.

C ++ este unul dintre acele limbaje de programare care este foarte flexibil și acoperă, de asemenea, mai multe caracteristici ale programării orientate pe obiecte. Supraîncărcarea este o altă caracteristică a acestui limbaj de programare.Următorii indicatori vor fi acoperiți în acest articol „Supraîncărcarea funcției în C ++” articol-

C ++ Supraîncărcare

Când creăm doi sau mai mulți membri ai unei clase care au același nume, dar diferiți ca număr sau tip de parametri, este cunoscut sub numele de supraîncărcare C ++. În C ++, putem supraîncărca:





  • metode,
  • constructori și
  • proprietăți indexate

Tipuri de supraîncărcare în C ++

types-of-overloading-in-c++

Ce este supraîncărcarea funcției în C ++?

Supraîncărcarea funcției în C ++ poate fi definită ca procesul de a avea două sau mai multe funcții membre ale unei clase cu același nume, dar diferiți ca parametri. În supraîncărcarea funcției, funcția poate fi redefinită fie utilizând diferite tipuri de argumente, fie un număr diferit de argumente în funcție de cerință. Numai prin aceste diferențe compilatorul poate face diferența între cele două funcții supraîncărcate.



Unul dintre avantajele majore ale supraîncărcării funcției este că crește lizibilitatea programului, deoarece nu este nevoie să folosim nume diferite pentru aceeași acțiune din nou și din nou.

matricea php print_r

Prin schimbarea numărului de argumente

În acest mod de supraîncărcare a funcțiilor, definim două funcții cu aceleași nume, dar un număr diferit de parametri de același tip. De exemplu, în programul menționat mai jos, am realizat două funcții add () pentru a returna suma a două și trei numere întregi.

// prima definiție a funcției int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

Aici funcția add () se spune că este supraîncărcată, deoarece are două definiții, una care acceptă două argumente și alta care acceptă trei argumente. Care funcție add () va fi apelată, depinde de numărul de argumente.



int main () {add (10, 20) // add () cu 2 parametri se va numi add (10, 20, 30) // sum () cu 3 parametri se va numi}
#include folosirea spațiului de nume std int add (int a, int b) {cout<< a+b <

În exemplul de mai sus, supraîncărcăm funcția add () modificându-i numărul de argumente. În primul rând, definim o funcție add () cu doi parametri, apoi o suprasarcină definind din nou funcția add (), dar de data aceasta cu trei parametri.

Având diferite tipuri de argumente

În această metodă, definim două sau mai multe funcții cu același nume și același număr de parametri, dar tipul de date utilizat pentru acești parametri este diferit. De exemplu, în acest program, avem trei funcții add (), primul primește două argumente întregi, al doilea primește două argumente float și al treilea primește două argumente duble.

#includeți utilizarea spațiului de nume std int add (int x, int y) // prima definiție {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

În exemplul de mai sus, definim funcția add () de trei ori. Mai întâi folosind numere întregi ca parametri, al doilea folosind float ca parametri și al treilea folosind dublu ca parametru.
Astfel, anulăm funcția add () de două ori.

Avantajele supraîncărcării funcției în C ++

  • Folosim supraîncărcarea funcției pentru a economisi spațiul de memorie, consistența și lizibilitatea programului nostru.

  • Cu conceptul de supraîncărcare a funcției de utilizare, putem dezvolta mai multe funcții cu același nume

  • Supraîncărcarea funcției arată comportamentul polimorfismului care ne permite să obținem un comportament diferit, deși vor exista unele legături care utilizează același nume al funcției.

  • Supraîncărcarea funcției accelerează execuția programului.

  • Supraîncărcarea funcției este utilizată pentru reutilizarea codului și, de asemenea, pentru a economisi memorie.

  • Ajută aplicația să încarce metoda clasei pe baza tipului de parametru.

  • Întreținerea codului este ușoară.

Dezavantaje ale supraîncărcării funcției în C ++

  • Declarațiile de funcție care diferă numai prin tipul său de returnare nu pot fi supraîncărcate cu procesul de supraîncărcare a funcției.
  • Declarațiile funcției membre cu aceiași parametri sau aceleași tipuri de nume nu pot fi supraîncărcate dacă oricare dintre ele este declarată ca funcție statică membru.
  • clasa XYZ {static void func () void func () // error}

Funcția de supraîncărcare și ambiguitate

Când compilatorul nu poate decide ce funcție ar trebui să invoce mai întâi dintre funcțiile supraîncărcate, această situație este cunoscută sub numele de ambiguitate de supraîncărcare a funcției. Compilatorul nu rulează programul dacă arată eroare de ambiguitate. Cauzele ambiguității supraîncărcării funcției:

  • Conversie tip.
  • Funcție cu argumente implicite.
  • Funcționează cu o trecere prin referință

Conversie tip:

#include folosirea spațiului de nume std funcția void (float) funcția void (int) funcția void (float x) {std :: cout<< 'Value of x is : ' <

Exemplul de mai sus aruncă o eroare - „apelul funcției supraîncărcate (dublu) este ambiguu”. Funcția (3.4) va apela prima funcție. Funcția (34) numește a doua funcție în funcție de predicția noastră. Dar nu asta se întâmplă, deoarece în C ++ toate constantele în virgulă mobilă sunt tratate ca duble, nu ca flotante. Dacă înlocuim variabila float cu o variabilă dublă, programul va funcționa bine. Prin urmare, numim aceasta o eroare de conversie de tip de la float la dublu.

Funcție cu argumente implicite:

#include folosirea spațiului de nume funcție std void (int) funcție void (int, int) funcție void (int x) {std :: cout<< 'Value of x is : ' <

Exemplul de mai sus oferă o eroare spunând că „apelul supraîncărcat‘ fun (int) ’este ambiguu”, deoarece funcția (int y, int z = 12) poate fi apelată în două moduri:

  1. Apelând funcția cu un singur argument (și va lua automat valoarea z = 12)
  2. Apelând funcția cu două argumente.

Când apelăm funcția: funcție (12) completăm complet condiția funcției (int) și a funcției (int, int), astfel compilatorul intră într-o ambiguitate care arată o eroare.

Funcție cu trecere prin referință

#include folosirea spațiului de nume funcție std void (int) funcție void (int &) funcție void (int a) {std :: cout<< 'Value of a is : ' < 

Programul de mai sus dă o eroare spunând că „apelul„ fun (int &) ”supraîncărcat este ambiguu”. După cum vedem, prima funcție ia un argument întreg și a doua funcție ia un parametru de referință ca argument. În acest caz, compilatorul nu este capabil să înțeleagă ce funcție este necesară utilizatorului, deoarece nu există nicio diferență sintactică între distracție (int) și distracție (int &), astfel că generează o eroare de ambiguitate.

Cu aceasta, ajungem la sfârșitul acestei supraîncărcări de funcții în C ++. Dacă doriți să aflați mai multe, consultați de Edureka, o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate Java, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom răspunde cât mai curând posibil.