30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

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.

170 9. Klassen <strong>in</strong> <strong>C++</strong><br />

se Art der Deklaration macht aus e<strong>in</strong>er allgeme<strong>in</strong> aufrufbaren Funktion e<strong>in</strong>e<br />

auf die Structure bezogene Methode. Der Begriff auf die Structure bezogen<br />

bedeutet, dass e<strong>in</strong>e solche Methode auch nur direkt auf e<strong>in</strong>e Instanz e<strong>in</strong>er<br />

solchen Structure aufgerufen werden kann. Wie e<strong>in</strong> solcher Aufruf funktioniert,<br />

lässt sich leicht erraten, wenn wir daran denken, wie Member-Variablen<br />

e<strong>in</strong>er struct angesprochen werden. Es wird e<strong>in</strong>fach der Punkt-Operator dazu<br />

herangezogen (bzw. im Falle von Po<strong>in</strong>tern natürlich der Pfeil-Operator).<br />

Die entsprechenden Aufrufe der Methoden sieht man <strong>in</strong> Zeile 85 und <strong>in</strong> der<br />

Folge. Zum Beispiel bedeutet das Statement <strong>in</strong> Zeile 85: Rufe die Methode<br />

<strong>in</strong>it auf der Variable one_name mit den Parametern "John" und "Doe" auf.<br />

E<strong>in</strong> Unterschied zu C fällt <strong>in</strong> Zeile 83 auf: Anstatt <strong>in</strong> gewohnter Manier<br />

für den Typ struct Name zu schreiben, steht hier e<strong>in</strong>fach Name als Datentyp.<br />

Dies funktioniert <strong>in</strong> C ++ und es macht das sonst <strong>in</strong> C zur leichteren Lesbarkeit<br />

<strong>in</strong> diesem Zusammenhang verwendete typedef überflüssig.<br />

E<strong>in</strong> wichtiges Detail zu Methoden wurde noch nicht besprochen: Die Deklaration<br />

derselben erfolgt <strong>in</strong>nerhalb der struct, wie aber def<strong>in</strong>iert man sie?<br />

Stellen wir uns vor, es gäbe <strong>in</strong> unserem Programm neben der struct Name<br />

auch noch e<strong>in</strong>e struct Address. Stellen wir uns weiters vor, dass s<strong>in</strong>nvollerweise<br />

die Initialisierung bei beiden über die Methode <strong>in</strong>it erfolgt. Wie teilen<br />

wir dann dem Compiler mit, welche der Def<strong>in</strong>itionen der <strong>in</strong>it Methoden nun<br />

zu welcher struct gehört? Dass man dies nicht über verschiedene Parameterlisten<br />

realisieren kann, versteht sich von selbst, denn das würde e<strong>in</strong>e grobe<br />

E<strong>in</strong>schränkung darstellen.<br />

Des Rätsels Lösung zeigt sich z.B. <strong>in</strong> Zeile 23: Man verwendet den sogenannten<br />

Scope-Operator (::), der folgendermaßen funktioniert: Man gibt<br />

den Namen der struct an, gefolgt von ::, gefolgt vom Namen der Methode.<br />

Damit liest sich Zeile 23 so: Die Funktion <strong>in</strong>it mit dem Scope auf<br />

die struct Name und den entsprechenden Parametern sieht folgendermaßen<br />

aus... Das bedeutet, dass man mittels des Scope Operators die entsprechende<br />

Zuordnung bei der Def<strong>in</strong>ition vornimmt. Bei der Deklaration ist diese Zuordnung<br />

natürlich nicht notwendig, denn durch das Auftreten der Deklaration<br />

<strong>in</strong>nerhalb der struct ist dem Compiler die Zugehörigkeit sowieso klar.<br />

Für Leser, denen der Cod<strong>in</strong>g Standard, der diesem Buch zugrunde liegt,<br />

noch nicht geläufig ist, mag die Deklaration der Members <strong>in</strong> den Zeilen 12 und<br />

13 etwas komisch anmuten. Jedoch schreibt der Cod<strong>in</strong>g Standard vor, dass<br />

Member Variablen mit e<strong>in</strong>em Unterstrich enden, um sie sofort als Members<br />

identifizieren zu können und von auto Variablen auf e<strong>in</strong>en Blick unterscheiden<br />

zu können. Sieht man sich Zeile 26 an, so sieht man auch gleich, was<br />

es mit Members so auf sich hat. In der Def<strong>in</strong>ition der Methode Name::<strong>in</strong>it<br />

werden die beiden Members first_name_ und last_name_ verwendet, als ob<br />

sie <strong>in</strong>nerhalb des Scopes der Methode def<strong>in</strong>iert wären. Genau das ist auch<br />

der Fall und das ist e<strong>in</strong>e weitere Eigenschaft des Scope-Operators. Dadurch,<br />

dass <strong>in</strong>it zum Scope von struct Name gehört, gehören auch die Members der<br />

struct Name zum aktuellen Scope und können daher ohne weitere Umschwei-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!