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) 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