Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
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