Wprowadzenie do przeciążania i przesłonięcia w C ++

Zacznijmy od posiadania podstawowych definicji przeciążania i zastępowania w C ++.

Przeciążenie : nazwa funkcji jest taka sama, ale parametry i typy zwrotów zmieniają się. Ponieważ poznamy różnicę między przeciążonymi funkcjami w czasie kompilacji, nazywa się to również polimorfizmem w czasie kompilacji.

Przesłanianie: Jest to funkcja języka programowania obiektowego, w którym funkcja klasy potomnej ma taką samą nazwę jak funkcja klasy rodzicielskiej. Ponieważ nadrzędna funkcjonalność pojawia się na obrazie po zadeklarowaniu obiektu i dostęp do funkcji za pomocą obiektów; to znaczy podczas wykonywania kodu, ta koncepcja zastępowania jest również nazywana polimorfizmem w czasie wykonywania.

Mamy ich składnię i sposoby programowania w późniejszych sekcjach.

Składnia przeciążenia i przesłonięcia

Oto składnia przeciążenia i przesłaniania podana poniżej.

Przeładowanie Składnia:

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
)

Wszystkie trzy z nich razem mogą stanowić przykład koncepcji przeciążenia.

Przesłaniająca składnia:

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
)
);

Powyżej jest składnia nadpisującej funkcjonalności. Główne dane wyjściowe można wywnioskować, gdy zadeklarujemy obiekt i wywołamy te same metody z klasy A i klasy B. W funkcjonalności zastępowania „obiekt” odgrywa ważną rolę.

Zobaczmy teraz każdy z nich, który pozwala lepiej poznać ich funkcjonalność.

Przykłady przeciążenia i przesłonięcia w C ++

Oto przykłady przeciążenia i przesłonięcia w C ++ z danymi wyjściowymi podanymi poniżej:

Przykład # 1 - Przeciążenie

Zacznijmy od prostego programu.

Kod:

#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;
)

Wynik:

A co jeśli podam nieprawidłowe wartości typu danych dla zmiennych a, b?

Kod:

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

Zmieniłem tylko główną część z powyższego programu, więc oto wyjście.

wynik:

Daje nam dane wyjściowe, ponieważ zamierza przekonwertować wartość zmiennoprzecinkową na typ danych int i daje nam dane wyjściowe.

Teraz jako ćwiczenie możesz spróbować zmienić typ zwracanej funkcji i parametry i bawić się nimi.

Przykład # 2 - Przesłanianie

Poniżej możemy podać przykład nadrzędnej funkcjonalności w C ++.

Kod:

#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();
)

Wynik:

Dzięki powyższemu kodowi możemy stwierdzić, że gdy odwołanie do obiektu pierwszej klasy jest przypisane do obiektu utworzonego w odniesieniu do naszej drugiej klasy. A potem, gdy uzyskaliśmy dostęp do metody zastępowania za pomocą obiektu klasy podstawowej, możemy wyraźnie zauważyć, że wynik klasy pochodnej został wyświetlony. Ta koncepcja nazywa się zastępowaniem. Pierwsza i druga klasa to odpowiednio klasa podstawowa i klasa pochodna. Wynik powyższego jest poniżej:

Czy jako ćwiczenie możesz spróbować zastąpić i przeciążić funkcję razem i sprawdzić, czy jest to możliwe, lub sprawdzić, jak wygląda wyjście?

Jak to działa?

Przeładowanie: tutaj nie ma specjalnego punktu, o którym moglibyśmy zanotować. Musimy upewnić się, że typ zwracanego parametru lub parametry wewnątrz funkcji są różne. Jeśli spojrzymy wyżej na strukturę programowania, funkcje są zadeklarowane jako pierwsze i podane są ich implementacje.

Przesłanianie: Składnia dziedziczenia i implementacja funkcji to kluczowe punkty, na które należy zwrócić uwagę. W powyższym przykładzie możemy zauważyć, że deklaracja funkcji z publicznym słowem kluczowym jest zupełnie inna.

A w C ++ definicja klasy kończy się średnikiem (;), a jeśli musimy odziedziczyć klasę podstawową do klasy potomnej, używamy symbolu dwukropka (:). Główna funkcja zastępowania jest obserwowana, gdy obiekty są deklarowane i inicjowane dla klasy. Po wywołaniu funkcji za pomocą obiektów możemy w pełni zrozumieć koncepcję przesłonięcia.

Zalety

  • Jedną z głównych zalet tych nadpisań i przeciążeń jest oszczędność czasu.
  • Oszczędzaj miejsce w pamięci.
  • Czytelność kodu jest zwiększona.
  • Tutaj, w przypadku koncepcji przeciążenia funkcji, możemy użyć różnych tych samych nazw funkcji dla różnych operacji, eliminując użycie różnych nazw funkcji.
  • Elastyczność i łatwość konserwacji kodu stają się łatwiejsze.
  • W przypadku przesłonięcia klasa potomna może mieć funkcje klasy macierzystej, a nawet może mieć własną implementację tej funkcji.
  • Do obiektów można się odwoływać, a funkcje zarówno klasy nadrzędnej, jak i podrzędnej mogą być dostępne dla klasy podrzędnej.

Wniosek

Teraz jasno zrozumieliśmy pojęcia przeciążenia i obejścia. W przypadku przeciążenia musimy upewnić się, że różnica w przeciążonych funkcjach istnieje albo w oparciu o typ zwracany, albo parametry, chociaż definicja funkcji w nich jest taka sama lub inna.

A w przypadku przesłonięcia, ponieważ jest to koncepcja programowania obiektowego, możemy wykorzystywać ją tylko w postaci klas wykorzystujących funkcję dziedziczenia.

Polecane artykuły

Jest to przewodnik po przeciążaniu i zastępowaniu w C ++. Tutaj omawiamy wprowadzenie, jak to działa, składnię, przykłady i zalety przeciążania i przesłonięcia w C ++ z implementacją kodu. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Przeciążenie w C ++
  2. Przeciążenie a zastąpienie
  3. Przesłanianie w PHP
  4. Przesłanianie w C ++
  5. Przesłanianie w Javie
  6. Polimorfizm w Javie
  7. 11 najważniejszych funkcji i zalet C ++
  8. Przesłanianie w Pythonie | Funkcja i zasady