. = parametrisierte Klassen, Klassen-Schablonen, generische Klassen
. wichtige Anwendung: Container-Klassen (z.B. BIDS von Borland)
. Beispiel:
Deklaration
template
class STACK
{
ElTyp *top;
ElTyp *bottom;
ElTyp *current;
public:
STACK (int gr=100);
~STACK();
void push(ElTyp e);
ElTyp pop();
int empty();
int full();
};
Implementierung der Element-Funktionen als Funktions-Templates
template
STACK ::STACK (int gr)
{
bottom = current = new ElTyp [gr];
top=bottom+gr;
}
template
STACK ::~STACK ()
{
delete [] bottom;
}
template
STACK ::void push (ElTyp e)
{
if (current!=top) *current++=e;
}
template
STACK ::ElTyp pop ()
{
if (current>bottom) current--;
return *current;
}
template
STACK ::int empty ()
{
return current==bottom;
}
template
STACK ::int full ()
{
return current==top;
}
main()
....
STACK iStack(10);
STACK fStack;
typedef STACK szSTACK;
szSTACK sSTACK;
...
iStack.push(17);
sStack.push(\"Karli\");
....
. bei Klassen-Templates können auch \"normale\" Parameter (nicht class) als Template-Parameter angegeben werden. Beispiel: Default-Stackgroesse
template
class STACK
{
ElTyp *top;
...
public
STACK (int gr=grdef);
...
};
main()
....
STACK
....
. Hinweis: Klasse zuerst mit konkretem Typ entwickeln und testen, erst danach parametrisieren!
4 |