Úvod do přetížení a přepsání v C ++
Začněme tím, že budeme mít základní definice pro Přetížení a Přepětí v C ++.
Přetížení : Název funkce je stejný, ale změny parametrů a vrací typ. Protože se seznámíme s rozdílem mezi přetíženými funkcemi během kompilačního času, nazývá se také polymorfismus kompilačního času.
Přepsání: Jedná se o funkci objektově orientovaného programovacího jazyka, kde funkce podřízené třídy má stejný název jako funkce třídy nadřazené. Jak převažující funkce přichází na obrázek, jakmile je objekt deklarován a funkce jsou zpřístupněny pomocí objektů; to je během provádění kódu, tento koncept potlačování je také nazýván polymorfismus runtime.
Jejich syntaxi a způsoby programování máme v pozdějších sekcích.
Syntaxe přetížení a přetažení
Níže je uvedena syntaxe přetížení a přepisu.
Syntaxe přetížení:
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
)
Všichni tři společně mohou představovat příklad konceptu přetížení.
Převažující syntaxe:
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
)
);
Výše uvedené je syntaxe nadřazené funkce. Hlavní výstup lze odvodit, jakmile deklarujeme objekt a zavoláme stejné metody z třídy A a třídy B. Ve funkcích potlačení „objektu“ hraje důležitou roli.
Nyní se podívejme na příklad, jak lépe poznat jejich funkce.
Příklady přetížení a přemostění v C ++
Zde jsou příklady přetížení a přepsání v C ++ s výstupem uvedeným níže:
Příklad č. 1 - Přetížení
Začněme jednoduchým programem.
Kód:
#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;
)
Výstup:
Co když nyní zadám nesprávné hodnoty typu dat pro proměnné a, b?
Kód:
int main()
(
int a = 10.8;
float b = 12;
calc(a);
calc(b);
calc(a, b);
)
Změnil jsem pouze hlavní část z výše uvedeného programu, takže tady jde výstup.
výstup:
Poskytuje nám výstup, protože převádí float hodnotu na typ dat int a dává nám výstup.
Nyní jako cvičení můžete zkusit změnit typ návratu funkce a parametry a hrát si s nimi.
Příklad č. 2 - Přepisování
Níže můžeme uvést příklad nadřazené funkce v C ++.
Kód:
#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();
)
Výstup:
Prostřednictvím výše uvedeného kódu můžeme zjistit, že když je odkaz na objekt první třídy přiřazen k objektu vytvořenému s ohledem na naši druhou třídu. A když jsme přistoupili k metodě potlačení pomocí objektu základní třídy, můžeme si jasně všimnout, že byl zobrazen odvozený výstup třídy. Tento koncept se nazývá převažující. První a druhá třída jsou základní a odvozená třída. Výstup výše uvedeného je níže:
Jako cvičení můžete vyzkoušet potlačení a přetížení funkce společně a zkontrolovat, zda je to možné, nebo zkontrolovat, jak se výstup ukáže být?
Jak to funguje?
Přetížení: Zde není žádný zvláštní bod, o kterém bychom si mohli všimnout. Musíme se ujistit, že se typ návratu nebo parametry uvnitř funkce liší. Podíváme-li se výše na strukturu programování, funkce jsou deklarovány jako první a je uvedena jejich implementace.
Přepis: Syntaxe dědičnosti a implementace funkcí jsou klíčové body, které si zde musíme všimnout. Ve výše uvedeném příkladu si můžeme všimnout, že deklarace funkce s veřejným klíčovým slovem je zcela odlišná.
A v C ++ je definice třídy zakončena středníkem (;) a pokud potřebujeme zdědit základní třídu pro podřízenou třídu, použijeme dvojtečku (:). Hlavní funkce potlačení je pozorována, když jsou objekty deklarovány a inicializovány pro třídu. Po vyvolání funkcí pomocí objektů můžeme potom jasně pochopit pojem potlačení.
Výhody
- Jednou z hlavních výhod těchto překlenutí a přetížení je úspora času.
- Ušetřete místo v paměti.
- Čitelnost kódu je zvýšena.
- Zde pro koncept přetížení funkcí můžeme použít různé stejné názvy funkcí pro různé operace, což vylučuje použití různých názvů funkcí.
- Flexibilita a udržovatelnost kódu je snazší.
- V případě nadřazenosti může mít podřízená třída funkce nadřazené třídy a může mít dokonce vlastní implementaci této funkce.
- Na objekty lze odkazovat a podřízená třída může přistupovat k funkcím nadřazené i podřízené třídy.
Závěr
Nyní jsme jasně porozuměli konceptům přetížení i převahy. Při přetížení musíme zajistit, aby rozdíl v přetížených funkcích existoval buď na základě typu návratu nebo parametrů, i když definice funkcí uvnitř nich je stejná nebo odlišná.
A v případě nadřazenosti, protože se jedná o objektově orientovaný programovací koncept, můžeme využít pouze ve formě tříd využívajících funkčnost dědičnosti.
Doporučené články
Toto je průvodce přetížením a přepsáním v C ++. Zde diskutujeme úvod, jak to funguje, syntaxe, příklady a výhody přetížení a přetečení v C ++ s implementací kódu. Další informace naleznete také v následujících článcích -
- Přetížení v C ++
- Přetížení vs Overriding
- Převažující v PHP
- Převažující v C ++
- Převažující v Javě
- Polymorfismus v Javě
- Prvních 11 funkcí a výhod C ++
- Převažující v Pythonu | Funkce a pravidla