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) 109<br />

10 Einige C ++-Ergänzungen, Zeigertyp, Freispeicher<br />

10.0 Überblick<br />

In diesem Kapitel werden einige wenige Ergänzungen in C ++ eingeschoben, die sinnvoll sind,<br />

um sich vertieft mit der Objektorientierung (Kap. 11) befassen zu können. Die weiteren sinnvollen<br />

C ++-Vertiefungen, die dazu nicht unbedingt notwendig sind, sind auf (Kap. 12) verschoben.<br />

Die hier vorgestellten Ergänzungen sind wichtig für das Verständnis der Folgekapitel.<br />

Unterkapitel 1 stellt zusammen, wie symbolische Konstanten gebildet werden können und<br />

wie die Benutzung sehr kurzer Funktionen für die Laufzeit beschleunigt wird.<br />

In Unterkapitel 2 wird der Datentyp Zeiger genauer erläutert. Dazu werden wichtige Regeln<br />

für die Interpretation zusammengesetzter Typen, ferner die Benutzung des const vorgestellt.<br />

Den in der Praxis sehr häufig anzutreffenden Umgang mit dem Freispeicher (oder dynamischen<br />

Speicher) stellt Unterkapitel 3 vor.<br />

10.1 Symbolische Konstanten, Makros und inline-Funktionen<br />

(10.10) Übb Dieses Unterkapitel zeigt zunächst, wie ein Programm für Programmierer lesbarer<br />

gemacht werden kann: statt wörtliche Konstanten ( ” Literale“) zu benutzen, sollen symbolische<br />

Konstanten (d. h. Namen) genommen werden. Ebenso werden Hinweise gegeben, wie<br />

die Ausführung kurzer Funktionen zur Laufzeit effizienter gemacht werden kann.<br />

(10.11) Symbolische Konstanten statt ” magischer Zahlen“ sind für eine gute Programmierung<br />

sehr wichtig, wie schon früher in (4.72) und (5.44) erwähnt wurde. Folgende Möglichkeiten<br />

bestehen hierbei:<br />

(a) C++ Konstante – häufig mit eigenem Speicherplatz,<br />

z. B. const Typ KonstantenName = Initialisierer ;<br />

Solche Konstanten haben globalen, lokalen oder Klassen-Gültigkeitsbereich – ja nach Definitionsort.<br />

In C bereits bekannt, jedoch erst in C++ auch als Indexgrenzen o. ä. erlaubt,<br />

d. h. als Bestandteil eines konstanten Ausdrucks.<br />

↑↑ In C++(alt) bei Klassen als statische Konstanten etwas schwierig handhabbar, in C++(neu) bei<br />

integralen Typen besser, da übersichtlichere Initialisierungsmöglichkeit und bessere Verwendbarkeit.<br />

(b) C/C++ Makros ohne Parameter (5.72) (sollten in C ++ vermieden werden).<br />

Nachteil: ” dummer“ Textersatz, kein Block- oder Klassen-Gültigkeitsbereich, kaum mit Debugger<br />

zu bearbeiten, da Ersetzung bereits durch Präprozessor.<br />

(c) C++ Aufzählungskonstanten, Näheres s. (12.21)<br />

Auch hier globaler, lokaler oder Klassen-Gültigkeitsbereich; auch diese Konstanten sind für<br />

konstante Ausdrücke zugelassen, z. B. als Arraydimensionierung.<br />

(10.12) Funktionen ohne Funktionsaufruf-Überbau, generische Funktionen<br />

(a) C++ inline-Funktionen<br />

Durch den 15 FunktionsSpezifizierer inline erhält der Compiler einen Hinweis, dass er jeden<br />

Aufruf der Funktion durch Einfügen des entsprechenden Funktionsblock-Codes ersetzen<br />

soll. Der Compiler darf diesen Hinweis ignorieren. Ein inline ist in der Regel nur bei sehr<br />

einfachen Funktionen sinnvoll, da sonst bei häufigem Funktionsaufruf der Codeumfang beträchtlich<br />

erhöht wird. Zum Einsatz in Klassen s. (11.11b).<br />

Im Gegensatz zu Makros (a) gibt es hier keine ” unerwarteten“ Effekte bei Parametern mit<br />

Seiteneffekten.<br />

Der Nachteil gegenüber Makros (a), dass nämlich für jeden Typ eine eigene Funktion geschrieben<br />

werden muss (z. B. MAX für int, für double usw.), wird bei (c) behoben.<br />

(b) ↑↑ C/C++ Makros mit Parameter<br />

#define Name( ParameterListe ) Textersatz mit Parametern

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!