• Keine Ergebnisse gefunden

Wie kann man Template-

N/A
N/A
Protected

Academic year: 2021

Aktie "Wie kann man Template-"

Copied!
17
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wo werden Templates sinnvoll

angewendet?

(2)

Wie kann man Template-

Implementierungen, ähnlich wie normale Klassen, ausserhalb ihrer Definition schreiben?

Antwort: Outline-Notation

erweitern, d.h. Keyword template

mit Template-Parametern

(3)

template <class StackItemType>

void stack<StackItemType>::push(StackItemType &item, bool& opOK) {

...

}

auch inline:

template <class StackItemType>

inline stack<StackItemType>::stack() {

SP = NULL;

}

(4)

Fact: templates werden in der Regel durch Hilfsklassen

aufgebaut (siehe unten) Es gibt 3 Arten friend -

Erklärungen in template s

(5)

friend

void nuetzlich(){...} //global class hilfsKlasse{

public:

void nuetzlich(); //Methode ...

};

template <class T>

class stack{

private:

friend class stackNase;

friend void nuetzlich();

friend void hilfsKlasse::nuetzlich();

...

(6)

Compiler muss die

Klassendefinition von

hilfsKlasse verarbeiten, bevor Klasse stack die friend -

Methoden von hilfsKlasse verwenden kann

Bei den anderen: wie bisher

(7)

template friend template

template <class T>

class hilfsKlasse { private:

void nuetzlich();

...

};

template <class T>

class stack{

private:

friend class anyKlasse<T>; //merke T!

friend class hilfsKlasse<T>::nuetzlich();

...

};

(8)

Klasse hilfsKlasse oder

zumindest eine Erklärung davon muss hier Klasse stack im

Programmtext vorausgehen

Auch Klasse anyKlasse , da sie

auch template ist.

(9)

template template

template <class Type>

class stack{

private:

template <class T>

friend class anyKlasse;

template <class T>

friend void hilfsKlasse<T>::nuetzlich();

...

};

(10)

Die template -Klasse anyKlasse und die Methodenfunktion

nuetzlich() sind friend s von stack für alle template -

Parameter!!

Diese Art friend -schaft nicht

überall verfügbar

(11)

template -Klasse stack wird mittels einer Hilfsklasse

stackKnoten definiert Diese Hilfsklasse ist eine

template -Klasse gleichen Typs.

Damit interne Felder von

stackKnoten zugegriffen werden

können, muss stack ein friend

von stackKnoten sein

(12)

! "

stackKnoten

template <class T>

class stackKnoten{

public:

stackKnoten (const T&):

stackKnoten();

T getData();

friend class stack<T>;

private:

T data;

stackKnoten<T> *naechster;

};

(13)

! stack template

template <class Type>

class stack{

public:

stack();

stack (const Type&);

~stack();

Type pop(bool &);

void push(const Type&, bool&);

...

private:

stackKnoten<Type> *SP;

};

(14)

# $ %

(15)

& %

Die Hilfsklasse stackKnoten ist überall verwendbar

Lösung: Alle Konstruktoren von

stackKnoten private machen

Andere Möglichkeit: Die Hilfsklasse

in Klasse stack verschachteln.

(16)

stack ' ( ' ' $

template <class Type>

class stack{

private:

class stackKnoten{

public:

stackKnoten(const Type&);

void setData(const Type&);

Type getData();

Type data; //jawohl, public in private!!

stackKnoten<Type> *Naechster;

};

(17)

$

Die Klasse stackKnoten ist nicht ausserhalb von stack sichtbar

Datenfelder von stackKnoten sind public für stack

Implementierung von

stackKnoten ist umständlich, da zwei qualifizierende Namen

( stackKnoten und stack ) nötig

sind (siehe Folie)

Referenzen

ÄHNLICHE DOKUMENTE

Doppelt verkettete Listen bestehen aus Listenzellen mit zwei Zeigern. • Ein Zeiger prev auf die

verschachtelten Prozeduren m¨ ussen viele Zugriffslinks verfolgt werden. Abhilfe: Displays

• Maintaining connectivity to legacy IPv4 devices/networks during the transition to IPv6-only deployments..

ourStack.push(&#34;Hallo&#34;);.. Dann testen wir, ob eine Exception geworfen wird, wenn wir versuchen, eine Element aus einem leeren Stack zu entnehmen...

Heap array

Der Kellerspeicher hat folgende Methoden: push kellert eine Zahl ein, pop kellert eine Zahl aus, size liefert die Anzahl der Zahlen und iterator liefert einen Iterator mit dem

Implementieren Sie eine FIFO-Warteschlange (First-in-first-out) für Zeichen, einmal mit einem Array in der Klasse ArrayQueue (zyklischer Puffer, Array mit fixer Größe) und einmal

Terminal A uses the DCP's User TELNET implementation to communicate with the remote host across the TCPjIP network.. The remote host provides