07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 ;

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!