Introducere în suprasarcină și supraîncărcare în C ++

Să începem acest lucru având definițiile de bază pentru supraîncărcare și suprasolicitare în C ++.

Supraîncărcare : Numele funcției este același, dar parametrii și returnările de tip se schimbă. Întrucât vom cunoaște diferența dintre funcțiile supraîncărcate în timpul compilării, se mai numește și polimorfismul Compile time.

Suprapunere: Aceasta este o caracteristică a limbajului de programare orientat pe obiecte în care funcția clasei copil are același nume ca funcția clasei părintelui. Pe măsură ce funcționalitatea suprapusă intră în imagine odată ce obiectul este declarat și funcțiile sunt accesate cu ajutorul obiectelor; adică în timpul executării codului, acest concept de suprasolicitare se mai numește și polimorfism în timp de rulare.

Avem sintaxa și modalitățile lor de programare în secțiunile ulterioare.

Sintaxa supraîncărcării și supraîncărcării

Iată sintaxa supraîncărcării și supraîncărcării date mai jos.

Sintaxa de supraîncărcare:

return_type function_name ( int param_1, string param_2)
(
//function definition
)
return_type_2 function_name ( int param_1, string param_2)
(
//function definition
)
return_type function_name ( int param_1, int param_2)
(
//function definition
)

Toate trei împreună pot constitui un exemplu al conceptului de supraîncărcare.

Sintaxă superioară :

Class A
(
Public:
void function_name ( int param_1, int param_2)
(
//function definition
)
);Class B : Class A
(
Public:
void function_name ( int param_1, int param_2)
(
//function definition
)
);

Cele de mai sus sunt sintaxa pentru funcționalitatea suprapusă. Ieșirea principală poate fi dedusă odată ce declaram un obiect și apelăm la aceleași metode din clasa A și clasa B. În funcționalitatea suprasolicitării „obiectului” joacă un rol important.

Acum să vedem un exemplu fiecare pentru a le cunoaște mai bine funcționalitatea.

Exemple de supraîncărcare și supraîncărcare în C ++

Iată exemplele de supraîncărcare și suprasolicitare în C ++ cu ieșirea dată mai jos:

Exemplul nr. 1 - supraîncărcare

Să începem cu un program simplu.

Cod:

#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)
#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)
#include
using namespace std;
int calc(int);
float calc(float);
int calc(int, float);
int main()
(
int a = 10;
float b = 11.2;
calc(a);
calc(b);
calc(a, b);
)
int calc(int a)
(
int tot=a*a;
cout << " Area of Square A is: " << tot< )
float calc(float b)
(
float tot = b*b;
cout << " Area of Square B is: " << tot < )
int calc(int a, float b)
(
int tot = a*b;
cout << " Area of Square C is: " << tot << endl;
)

ieşire:

Acum, ce se întâmplă dacă dau valori de tip de date greșite pentru variabilele a, b?

Cod:

int main()
(
int a = 10.8;
float b = 12;
calc(a);
calc(b);
calc(a, b);
)

Am schimbat doar partea principală din programul de mai sus, așa că aici merge rezultatul.

ieșire:

Ne oferă ieșirea, deoarece va converti valoarea float la tipul de date int și ne oferă ieșirea.

Acum, ca exercițiu, puteți încerca să schimbați tipul și parametrii de returnare a funcției și să vă jucați cu ei.

Exemplul # 2 - Suprasolicitare

Mai jos putem avea un exemplu pentru o funcționalitate imperativă în C ++.

Cod:

#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)
#include
using namespace std;
class First
(
public:
virtual void Calc( int a, float b)
(
int tot= a*b;
cout << "Square of First class is: "<< tot < )
void Other()
(
cout<<"Other function in first class"< )
);
class Second : public First
(
public:
// Overriding method
void Calc(int a, float b)
(
float tot = a+b;
cout << "Addition of second class is: " < )
);
int main()
(
int a= 5;
float b=2.5;
Second s;
First &f1 = s;
f1.Calc(a, b);
s.Other();
)

ieşire:

Prin codul de mai sus, putem constata că atunci când referința obiectului de primă clasă este atribuită obiectului creat cu privire la clasa a doua. Și atunci când am accesat metoda de înlocuire folosind obiectul clasei de bază, putem observa clar că a fost afișată ieșirea clasei derivate. Acest concept se numește supraordonant. Prima și a doua clasă sunt Clasa de bază și respectiv Derivate. Rezultatele de mai sus sunt următoarele:

Ca exercițiu puteți încerca să supraîncărcați și să supraîncărcați o funcție împreună și să verificați dacă este posibil sau să verificați cum se pare că rezultatul este?

Cum functioneazã?

Supraîncărcarea: Aici, nu există un punct special pentru care să avem o notă. Trebuie să ne asigurăm că tipul de retur sau parametrii din interiorul funcției variază. Dacă privim mai sus structura de programare, funcțiile sunt declarate mai întâi și implementarea lor este dată.

Suprasolicitare: sintaxa moștenirii și implementarea funcțiilor sunt punctele cheie care trebuie observate aici. În exemplul de mai sus putem observa că declarația de funcție cu cuvântul cheie public este destul de diferită.

Și în C ++, definiția clasei se încheie cu un semicon (;) și dacă trebuie să moștenim clasa de bază la clasa copil, folosim simbolul colon (:). Funcționalitatea principală a suprasolicitării este observată atunci când obiectele sunt declarate și inițializate pentru clasă. După apelarea funcțiilor folosind obiectele, putem înțelege clar conceptul de suprasolicitare.

avantaje

  • Unul dintre principalele avantaje ale supraîncărcării și supraîncărcării este economisirea de timp.
  • Economisiți spațiu de memorie.
  • Legabilitatea codului este crescută.
  • Aici, pentru conceptul de supraîncărcare a funcțiilor, putem utiliza nume de funcții diferite pentru operații diferite, eliminând utilizarea de nume de funcții diferite.
  • Flexibilitatea și mentenanța codului devin mai ușoare.
  • În cazul suprasolicitării, clasa copil poate avea funcții de clasă părintească și poate avea chiar propria implementare a acestei funcții.
  • Obiectele pot fi trimise și funcțiile atât ale clasei părinte, cât și ale clasei copilului pot fi accesate de clasa copil.

Concluzie

Acum am înțeles clar conceptele de suprasarcină și supraîncărcare. În cazul supraîncărcării, trebuie să ne asigurăm că diferența dintre funcțiile supraîncărcate există fie pe baza tipului returnare, fie a parametrilor, deși definiția funcției din interiorul acestora este aceeași sau diferită.

Și în cazul suprasolicitării, întrucât este un concept de programare orientat pe obiect, nu putem folosi decât sub formă de clase folosind funcționalitatea moștenirii.

Articole recomandate

Acesta este un ghid pentru supraîncărcare și supraîncărcare în C ++. Aici vom discuta introducerea, cum funcționează, sintaxa, exemple și avantajele supraîncărcării și suprasolicitării în C ++ cu implementarea codului. De asemenea, puteți consulta următoarele articole pentru a afla mai multe -

  1. Supraîncărcare în C ++
  2. Supraîncărcarea vs suprasolicitare
  3. Suprasolicitare în PHP
  4. Suprapunere în C ++
  5. Suprasolicitare în Java
  6. Polimorfism în Java
  7. Top 11 caracteristici și avantaje ale C ++
  8. Suprafață în Python | Funcție și reguli