1 / 11

Šablone funkcij

Šablone funkcij. Šablone (template s ) uporabljamo takrat, kadar želimo izvesti nad različnimi podatki identične operacije. Šablone nam omogočajo, da zapišemo implementacijo funkcije samo enkrat, kopije z ustreznimi tipi (konkretne funkcije) pa napravi prevajalnik v času prevajanja.

alida
Download Presentation

Šablone funkcij

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Šablone funkcij Šablone (templates) uporabljamo takrat, kadar želimo izvesti nad različnimi podatki identične operacije. Šablone nam omogočajo, da zapišemo implementacijo funkcije samo enkrat, kopije z ustreznimi tipi (konkretne funkcije) pa napraviprevajalnik v času prevajanja.

  2. Šablone funkcij template <class T> T max(T vr1, Tvr2, Tvr3) { T max = vr1; if (vr2 > max) max = vr2; if (vr3 > max) max = vr3; return max; }

  3. Uporaba šablone funkcije #include <iostream.h> main() { int i1,i2,i3; cout << "Vpisi tri cela stevila: "; cin >> i1 >> i2 >> i3; float f1,f2,f3; cout << "Vpisi tri realna stevila: "; cin >> f1 >> f2 >> f3; char c1,c2,c3; cout << "Vpisi tri znake: "; cin >> c1 >> c2 >> c3; cout << "Najvecje celo stevilo: "; cout << max(i1,i2,i3) << endl; cout << "Najvecje realno stevilo: "; cout << max(f1,f2,f3) << endl; cout << "Največji znak: "; cout << max(c1,c2,c3) << endl; return 0; }

  4. Šablone funkcij in prekrivanje Vse funkcije, definirane z določeno šablono, imajo enako ime, zato prevajalnik določi pravo funkcijo s prekrivanjem. Prekrijemo lahko tudi samo šablono, tako da: • podamo novo šablono funkcije z istim imenom in drugimi argumenti, • podamo definicijo funkcije (ne šablone) z istim imenom in istimi argumenti.

  5. Šablone razredov Šablonarazreda deluje enako kot šablona funkcije, le da prevajalnik namesto funkcij naredi razrede. Tako npr. iz šablone razreda seznam tvorimo seznam celih števil, seznam znakov, seznam oseb itd.. Šablono razredov imenujemo tudi parameterizirani tip, ker z enim ali več parametrov določimo konkretno šablono (konkretni razred, torej “abstraktni tip”). .

  6. Primer definicije šablone razreda seznam z enim parametrom, ki določa tip elementov seznama: // datoteka seznam.h template<class tip> // določa, da je to šablona; sledijo formalni parametri class seznam { … seznam(); // konstruktor void VstaviZaTrenutno(tip element); void VstaviPredTrenutno(tip element); … vozlisce<tip>* k_zacetek; // vozlisce<tip> je šablona vozlisca, definirana drugje … }; template<class tip> // to vrstico ponovimo pred vsako definicijo funkcije šablone! seznam<tip>::seznam() { k_zacetek=NULL;}; …itd.

  7. Primer uporabe šablone razreda seznam: // datoteka seznam.cpp #include “seznam.h” Int main() { seznam<int> moj_seznam1; // objekt seznama celih števil seznam <float> moj_seznam2; // objekt seznama realnih števil moj_seznam1.VstaviPredTrenutno(6); moj_seznam2.VstaviPredTrenutno(3.145926); … itd. return 0; }

  8. Primer definicije šablone razreda sklad, kjer drugi parameter določa vrednost - največjo velikost sklada: // datoteka sklad.h template<class tip, int max_elem> // drugi formalni parameter je vrednost class sklad { … bool JePoln(); void Vstavi (tip element); … tip polje_sklada[max_elem]; int vrh; … }; // “template” s formalnimi parametri ponovimo pred definicijo funkcije šablone! template<class tip, int max_elem> sklad<tip,maxelem>::JePoln() { if (vrh==max_el) return true else return false;}; …

  9. Primer uporabe šablone razreda sklad: // datoteka sklad.cpp #include “sklad.h” Int main() { sklad<int,100> moj_sklad; // objekt sklada celih števil (največ 100) if (moj_sklad.JePoln()==false) moj_sklad.Vstavi (6); // vstavi element na sklad … itd. return 0; }

  10. Šablone razredov in dedovanje Dedovanje omogoča prilagajanje že napisanih šablon. Z dedovanjem izpeljemo iz šablone novo šablono. V šablonah lahko definiramo prijatelje, pri čemer delujejo enaka pravila kot pri prijateljih razredov.

  11. Primer izpeljave šablone razreda sklad iz šablone razreda seznam: // datoteka skladizp.h #include “seznam.h” template<class tip> class sklad: private seznam<tip> // sklad deduje po šabloni seznam { public: void Vstavi (tip element) {VstaviZaTrenutno(element);}; … … };

More Related