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) 103<br />
(9.12)<br />
◦ dazu weitere Deklarationen, beispielsweise Typen.<br />
• Optional beliebig oft ZugriffsSpezifizierer: (mit Doppelpunkt), und zwar private:<br />
(dann sind die nachfolgenden Elemente verborgen) und public: (dann sind sie öffentlich);<br />
steht direkt hinter der öffnenden geschweiften Klammer kein Spezifizierer, so wird<br />
dort implizit private: gesetzt.<br />
Natürlich müssen die Elementfunktionen – zumindest wenn sie irgendwo benutzt werden –<br />
zusätzlich noch definiert werden; dieses geschieht i. a. außerhalb der Klassendefinition, und<br />
zwar in der zur Klasse gehörigen Programmdatei.<br />
Anm1 Eine Funktionsdefinition innerhalb der Klassendefinition ist auch erlaubt; in der Praxis wird<br />
dieses nur bei sehr kleinen Funktionsblöcken gemacht. Hierbei fasst der Compiler die Funktion<br />
als inline (10.12a, 11.11b) auf.<br />
Anm2 Statt des Schlüsselworts class ist auch das Schlüsselwort struct erlaubt, Näheres dazu s.<br />
(11.11c).<br />
Bsp – siehe auch (9.12 Bsp, 9.13 Bsp, 9.21 Bsp) –<br />
class Komplex {<br />
double re, im;<br />
public:<br />
// "Markierung" für Konstruktoren, s. Punkt (21)<br />
void setzKompl(double realT, double imagT);<br />
double real() { return re; } // Dekl. und Definition von real()<br />
double imag(); // Deklaration von imag()<br />
};<br />
(a) Der Gültigkeitsbereich 〈scope〉 der Klassenelemente ist der Bereich der gesamten Klasse<br />
(genauer: jeweils ab Deklarationspunkt), jedoch nicht außerhalb der Klasse. Um jedoch<br />
z. B. bei der Definition einer Elementfunktion, wenn sie (so der Normalfall!) außerhalb der<br />
Klassendefinition erfolgt, den Klassen-Gültigkeitsbereich zu öffnen, muss man den Bereichsauflösungsoperator<br />
:: (Op1b) benutzen:<br />
KlassenName::ElementName<br />
Hierbei gilt der gesamte Funktionsblock – dazu auch die Parameterliste – ebenfalls als<br />
zum Klassen-Gültigkeitsbereich zugehörig; hier braucht man den Bereichsauflösungsoperator<br />
nicht zu benutzen. Innerhalb dieses Bereichs darf auf jedes Klassenelement zugegriffen<br />
werden – unabhängig von einer Zugriffsbeschränkung.<br />
↑↑1 Auch bei Definition von Elementfunktionen innerhalb der Klassendefinition (9.11b Anm1) kann<br />
im Funktionsblock auf alle Elementnamen zugegriffen werden, auch auf solche, die in der<br />
Klassendefinition erst folgen.<br />
↑↑2 Es ist erlaubt, auch innerhalb des Funktionsblocks von Elementfunktionen den Bereichsauflösungsoperator<br />
zu benutzen (KlassenName::ElementName); dies ist eine der Möglichkeiten,<br />
ggf. Namenskonflikte aufzulösen. Eine andere ähnliche Möglichkeit ist die Benutzung<br />
des this-Zeigers (this->ElementName), s. (11.13).<br />
(b) Klassennamen haben immer externe Bindung, s. (8.22).<br />
(9.13)<br />
Bsp – zu (9.11 Bsp), siehe auch (9.13 Bsp, 9.21 Bsp) –<br />
// Definition von Elementfunktionen der Klasse Komplex:<br />
void Komplex::setzKompl(double realT, double imagT)<br />
{ re=realT; im=imagT; }<br />
double Komplex::imag()<br />
{ return im; }<br />
Ein Objekt ist in C ++ eine Variable eines Klassentyps. Die Anweisung zur Erzeugung<br />
eines solchen Objekts (einer solchen Variablen) erfolgt genauso wie bei Variablen<br />
von eingebauten Typen (z. B. bei int) durch eine Variablendefinition.<br />
Allgemeine Variablendefinition: Typ VariablenName ;<br />
Spezielle Variablendefinition (Objekt): KlassenName ObjektName ;