07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 118<br />

Deklaration<br />

(ggf. auch Def.)<br />

Impliziter<br />

zusätzlicher<br />

Parameter<br />

Elementfunktion<br />

– nichtstatisch, s. (e) –<br />

Globale Funktion<br />

– auch Freundfunktion, s. (Anm) –<br />

innerhalb der Klassendefinition außerhalb einer Klasse<br />

– als Freund auch innerhalb –<br />

this (an erster Stelle) kein impliziter Parameter<br />

Bsp – T sei zugehörige Klasse –<br />

Funktionskopf Programmtext (in Klassendef.):<br />

Typ fkt(TypPar namePar)<br />

Abänderung durch Compiler:<br />

Typ fkt(T *const this,<br />

TypPar namePar)<br />

Aufruf Programmtext:<br />

objektName.fkt(par)<br />

Abänderung durch Compiler:<br />

T::fkt(&objektName, par)<br />

Typ fkt(TypPar namePar)<br />

fkt(par)<br />

Anm friend-Funktionen erscheinen zwar in der Klassendefinition, sind aber ” normale“ globale<br />

Funktionen (ohne this-Zeiger), die allerdings unbeschränkten Zugriff auf die Klassenelemente<br />

haben (11.12). Elementfunktionen anderer Klassen, die friend-Funktionen sind, haben<br />

ebenfalls keinen this-Zeiger auf ein Objekt dieser Klasse, statt dessen (natürlich) einen Zeiger<br />

zu einem Objekt der anderen Klasse, s. Beispielcode (11.12): die Elementfunktion zugriff<br />

hat keinen this-Zeiger auf ein Objekt der Klasse TeilOffen, wohl aber auf AndereKlasse.<br />

(c) Den Zeiger this darf der Programmierer in der Definition der Elementfunktion benutzen:<br />

this->element ist beispielsweise äquivalent zu element<br />

falls der Name element nicht verdeckt ist (Bedeutung des Operators -> s. (10.29)). Im<br />

Falle der Verdeckung kann über den this-Zeiger trotzdem darauf zugegriffen werden. Eine<br />

andere Möglichkeit (Bereichsauflösungsoperator ::) war in (9.12a) vorgestellt worden.<br />

(d) Soll das Objekt, zu dem eine Elementfunktion aufgerufen wird, innerhalb dieser Funktion<br />

als konstant behandelt werden, d. h. soll *this konstant sein, so muss this vom Typ<br />

const T *const<br />

sein (10.28). Dieses zusätzliche const kann der Benutzer jedoch nicht direkt benennen, da<br />

er this nicht selbst einträgt. Statt dessen muss er dieses const hinter die Parameterliste<br />

stellen, vgl. (Cpp/Kap. 1, 32 DirektorDeklarator, 3. Zeile).<br />

Bsp (Nichtkonstantes Objekt) Benutzer: Typ fkt(TypPar namePar)<br />

– vgl. Tabelle oben – Compiler: Typ fkt(T *const this, TypPar namePar)<br />

(Konstantes Objekt) Benutzer: Typ fkt(TypPar namePar) const<br />

Compiler: Typ fkt(const T *const this, TypPar namePar)<br />

Beispiel Programmtext: Elementfunktion text in (11.15a)<br />

(e) Werden hier Elementfunktionen erwähnt, sind immer nichtstatische Elementfunktionen<br />

gemeint. Statische Elementfunktionen haben keinen this-Zeiger; Näheres s. (Kap. 11.5).<br />

(11.14) Initialisiererliste bei der Definition eines Konstruktors<br />

(a) Einfache Datenelemente eines Objekts können beim Konstruktoraufruf direkt initialisiert<br />

werden, anstatt im Konstruktorrumpf (ZusammengesetzteAnweisung) entsprechende Zuweisungen<br />

auszuführen. Diese Initialisierungen werden bei der Konstruktordefinition gesetzt.<br />

Syntax (Cpp/Kap. 1, 33 FunktionsDefinition, 2. Zeile, vereinfacht/angepasst):<br />

KonstruktorName ( ParameterDeklarations-LISTEopt )<br />

: ElementName(Initialisierer) [- , ElementName(Initialisierer) ]- 0..n<br />

54 ZusammengesetzteAnweisung<br />

Auf die gleiche Weise ist es in der Initialisiererliste möglich, Elemente, die selbst Objekte<br />

sind, durch einen Konstruktoraufruf zu initialisieren; ohne eine solche (explizite) Initialisierung<br />

wird vor Eintritt in den Konstruktorblock jeweils der zugehörige Standardkonstruktor

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!