Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 117<br />
(11.12) Freunde<br />
Globale Funktionen (11.13), Elementfunktionen oder auch alle Elemente einer Klasse können<br />
Freund einer Klasse sein, d. h. den Zugriff auf alle Bestandteile erhalten.<br />
Der Ort der 12 friend-Spezifizierung ist beliebig innerhalb der Klassendefinition wählbar, er<br />
ist unabhängig von Zugriffsspezifizierern:<br />
class TeilOffen {<br />
// Deklaration von Elementen<br />
// ...<br />
friend void ansicht();<br />
friend double AndereKlasse::zugriff(int a);<br />
friend class Neugierig;<br />
// ggf. Fortsetzung der Elementdeklarationen<br />
// ...<br />
};<br />
Semantik:<br />
Auf alle Elemente dieser Klasse TeilOffen – unabhängig von Zugriffsbeschränkungen –<br />
dürfen zugreifen:<br />
die (globale, d. h. nicht einer Klasse angehörige) Funktion ansicht,<br />
die Elementfunktion zugriff der Klasse AndereKlasse,<br />
alle Elemente der Klasse Neugierig.<br />
Anm1 Das Auftreten von friend deutet wegen des Aufbrechens des Geheimnisprinzips meist einen<br />
Entwurfsfehler an. Es gibt nur wenige Fälle, in denen ein friend sinnvoll und gerechtfertigt<br />
ist, s. z. B. (Kap. 11.2). Es ist wichtig, dass man sehr sparsam mit dieser Möglichkeit umgeht<br />
und zunächst immer überlegt, ob man nicht auch ohne friend auskommen kann.<br />
Anm2 Die Spezifizierung friend ist nicht symmetrisch. Zum obigen Beispiel:<br />
Damit die Klasse TeilOffen auch auf verborgene Elemente der Klasse Neugierig zugreifen<br />
kann, muss sie in Neugierig als Freund eingetragen sein.<br />
Anm3 Die Spezifizierung friend ist auch nicht transitiv. Zum obigen Beispiel:<br />
Ist die Klasse Weiter ein Freund von Neugierig (d. h. in Neugierig als Freund eingetragen),<br />
so ist nicht automatisch Weiter ein Freund von TeilOffen.<br />
Anm4 Die Spezifizierung friend wird auch nicht vererbt.<br />
Anm5 Zum obigen Beispiel: Die Klasse AndereKlasse mit der Elementfunktion zugriff muss dem<br />
Compiler an der Stelle der friend-Deklaration bekannt sein.<br />
Anm6 Zum obigen Beispiel: Falls Neugierig als Klassenname bekannt ist, kann man das Schlüsselwort<br />
class weglassen, es genügt folgende Angabe:<br />
friend Neugierig;<br />
Anm7 Zum Umgang des Compilers MS Visual C ++ 6.0 mit friend-Operatorfunktionen s. (11.23d).<br />
(11.13) Zeiger this<br />
(a) Eine Elementfunktion erhält bei jedem Aufruf als impliziten zusätzlichen ersten Parameter<br />
einen Zeiger auf das Objekt, zu dem sie aufgerufen wird. Dieser Zeiger hat den Namen this.<br />
Ist das Objekt, deren Elementfunktion aufgerufen wird, vom Typ T, so ist this vom Typ<br />
T *const,<br />
d. h. der Zeiger this zeigt auf T und ist konstant, vgl. (10.28, 10.25). Eine Änderungserlaubnis<br />
von this ergäbe auch keinen Sinn.<br />
(b) Wegen (a) muss genau zwischen Elementfunktionen und globalen Funktionen unterschieden<br />
werden: erstere können nur in Zusammenhang mit einem Objekt aufgerufen werden<br />
(auf das der implizite Zeiger this zeigt), die zweiten ohne Objekt.