A polimorfizmusról általában A statikus polimorfizmus
Generikus programozásnál osztályokat és/vagy függvényeket nemcsak értékekkel, hanem egy vagy több típussalis paraméterezünk. |
static int Dupláz(intMit){ return 2 * Mit; } |
Mit
és ennél a függvényhívásnál:int x; x = Dupláz(21); |
Vedekezik()
metódusa):template <typenameT> void SzereplotMukodtet(TSzereplo){ Szereplo.Vedekezik(); } |
T
-vel) van paraméterezve. A paraméter deklarációja
ezt mondja:
"Ide tetszőleges típusú paraméter kerülhet, feltéve, hogy rendelkezik minden olyan metódussal, melyet a függvény
törzsében felhívok."
Vedekezik()
metódusa.class Szamuraj{ public: voidVedekezik(){ std::cout << "Elszántan kaszabolok!\n"; } void HarakiritKovetEl(); //... }; |
class PincsiKutya{ public: voidVedekezik(){ std::cout << "Gazdámhoz szaladok!\n"; } void Hizeleg(); //... }; |
SzereplotMukodtet
függvénynek paraméterként, mert van
nyilvános Vedekezik()
metódusuk:Szamuraj sz; PincsiKutya p; SzereplotMukodtet(sz); SzereplotMukodtet(p); |
Szamuraj
és PincsiKutya
) nem áll semmilyen
rokoni kapcsolatban egymással, egyetlen közös vonásuk az, hogy van Vedekezik()
metódusuk.
SzereplotMukodtet(sz);
SzereplotMukodtet
függvénynek egy olyan változatára, melynek a paramétere
Szamuraj
típusú. Ekkor el is készíti ezt:void SzereplotMukodtet(SzamurajSzereplo){ Szereplo.Vedekezik(); } |
T
ípus-tésztából kivágjuk az előre eltervezett formát.
A függvénysablonok mindig átírhatókfüggvénytúlterheléssé, az osztálysablonok pedig típussal nem paraméterezett osztályokká. |
fenti példából
'ki tudjuk operálni' a
függvénysablont egyszerű függvénytúlterhelés segítségével. A függvénysablont kitöröljük és egyszerűen definiálunk két
függvényt a konkrét paramétertípusokkal:
void SzereplotMukodtet(SzamurajSzereplo){ Szereplo.Vedekezik(); } void SzereplotMukodtet(PincsiKutyaSzereplo){ Szereplo.Vedekezik(); } |
A statikus polimorfizmus A polimorfizmusról általában