next up previous
Next: Ada Up: Polimorfizem Previous: Ad-hoc polimorfizem

Polimorfizem z vzorci / kalupi - templates

Kako delujejo kalupi(vzorci)? Ko naredimo funkcijo, razred ali kaj podobnega, lahko rečemo, da bo to le vzorec (kalup), ki bo sicer kot tak neuporaben in bo postal resnična funkcija (razred, ...) šele, ko bomo določili dodatne parametre.

Sintaksa definicije vzorca je:

displaymath102

primer:

displaymath103

Za naše potrebe, kjer bomo definirali vzorec razreda skladov predmetov iz nekega drugega razreda, boma namesto type zapisali class - parameter našega vzorca je pač razred predmetov, ki so naloženi na sklad:

  template <class tSklElt> Sklad { ... };
Rezervirana besedica template (kalup, vzorec) nakazuje, da definiramo kalupni razred Sklad. Ta kalup ima kot parameter razred tSklElt - to je razred predmetov naloženih na sklad. Njegova deklaracija seže samo do konca deklaracijskega kalupa razreda. Ko je konec deklaracije razreda, prevajalnik razreda tSklElt ne pozna več!

Seveda takšen kalup razreda ni takoj uporaben, saj ne ve, kaj tSklElt sploh predstavlja. Zato moramo pred uporabo povedati s kakšen razred (tip) predstavlja tSklElt:

  Sklad <int>.
S tem iz kalupa naredimo razred skladov celih števil. Kako izgleda celoten program si lahko ogledate na:

displaymath104

To ni samo definicijski modul, ampak vključuje tudi izvedbeni modul.

Primer uporabe:

int main() {
  Sklad<int>   s1;
  Sklad<int>   s2(3);
  Sklad<float> s3;
  .
  .
  .
};



Andrej Brodnik (Andy)
Fri May 22 13:56:34 MET DST 1998