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 -
- Przeciążenie w C ++
- Przeciążenie a zastąpienie
- Przesłanianie w PHP
- Przesłanianie w C ++
- Przesłanianie w Javie
- Polimorfizm w Javie
- 11 najważniejszych funkcji i zalet C ++
- Przesłanianie w Pythonie | Funkcja i zasady