Predloga razreda deluje enako kot predloga funkcije, le da prevajalnik namesto funkcij naredi razrede. Tako npr. iz predloge razreda seznam tvorimo seznam celih števil, seznam znakov, seznam oseb itd..
Predlogo razredov imenujemo tudi parameterizirani tip, ker z enim ali več parametrov določimo konkretno predlogo (konkretni razred, torej “abstraktni tip”).
// datoteka seznam.h
template<class tip> // določa, da je to predloga; sledijo formalni parametri
class seznam
{ …
seznam(); // konstruktor
void VstaviZaTrenutno(tip element);
void VstaviPredTrenutno(tip element);
…
vozlisce<tip>* k_zacetek; // vozlisce<tip> je predloga vozlisca, definirana drugje
…
};
template<class tip> // to vrstico ponovimo pred vsako definicijo funkcije predloge!
seznam<tip>::seznam()
{
k_zacetek=NULL;};
…itd.
// 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;
}
// 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 predloge!
template<class tip, int max_elem>
sklad<tip,maxelem>::JePoln()
{ if (vrh==max_el) return true else return false;};
…
// 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;
}
Dedovanje omogoča prilagajanje že napisanih šablon.
// 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);};
…
…
};