Einführung in C++ Kapitel 2 — Zusammengesetzte Datentypen

Aufzählungstypen

Beispielprogramm: AUFZ.CPP

Die Datei AUFZ.CPP gibt ein Beispiel für ein Programm, das eine Variable eines Aufzählungstypen verwendet. Der Aufzählungstyp wird in C++ ähnlich verwendet wie in ANSI-C, es gibt aber doch beträchtliche Unterschiede. Das Schlüsselwort enum muß bei der Definition einer Variablen dieses Typs nicht noch einmal gebraucht werden, man kann dies aber tun. Die Variable mit dem Namen Spielausgang wird als ein Aufzählungstyp definiert. Wie Du siehst ist enum bei der Definition nicht vonnöten. Es kann aber für Dich eindeutiger sein, das Schlüsselwort auch bei der Variablendefintion zu verwenden, so wie das in C verlangt wird.

Um zu zeigen, daß der Gebrauch von enum wirklich optional ist, steht das Schlüsselwort in Zeile 9, in Zeile 8 lassen wir es aber weg. Neben diesem trivialen Unterschied gibt es aber noch einen wichtigeren in der Verwendung von Aufzählungstypen zwischen C und C++. In C ist ein Aufzählungstyp einfach eine Variable vom Typ int, in C++ aber ein eigener Typ. Mit Variablen dieses Typs können keine mathematischen Operationen durchgeführt werden, es können ihnen auch keine ganzen Zahlen zugewiesen werden. Eine solche Variable kann auch nicht hinauf- oder heruntergezählt werden wie in C. In unserem Beispielprogramm verwenden wir eine ganze Zahl als Index der for-Schleife, da wir diese inkrementieren können. Dann weisen wir der Aufzählungsvariablen den Wert dieses Indizes (Zaehler) mithilfe einer Typenumwandlung zu. Die Typenumwandlung ist unbedingt erforderlich, oder der Compiler wird einen Fehler melden. Die mathematischen Operationen sowie die Operatoren zum In- und Dekerementieren können für den Aufzählungstypen definiert werden, sie sind aber nicht automatisch verfügbar. Dem Überladen von Operatoren werden wir uns später widmen, dann wird auch der letzte Satz etwas mehr Sinn machen.

Wenn Du mit einem älteren Compiler arbeitest, kannst Du möglicherweise die Aufzählungsvariable Spielausgang als Schleifenindex verwenden, Dein Code ist dann aber nicht mit dem eines neueren Compilers kompatibel.

Den Rest des Programmes verstehst Du sicherlich. Nachdem Du Dir alles genau angeschaut hast, kompiliere das Beispielprogramm und führe es aus.

Eine einfache Struktur

Beispielprogramm: STRUKT.CPP

Das Programm STRUKT.CPP illustriert die Verwendung einer einfachen Struktur. Diese Struktur unterscheidet sich von der in C üblichen nur dadurch, daß das Schlüsselwort struct bei der Definition einer Variable dieses Typs nicht notwendig ist. In den Zeilen 12 und 13 sehen wir die Definition einer Variable ohne das Schlüsselwort, Zeile 14 zeigt, daß wir es aber verwenden können, wenn wir wollen. Es bleibt Dir überlassen, welchem Stil Du in Deinen C++ Programmen den Vorzug gibst.

Kompiliere auch dieses Programm, nachdem Du es genau studiert hast. Das nächste Beispiel ist diesem sehr ähnlich, es stellt aber etwas ganz Neues vor, eine Klasse.

Eine ganz einfache Klasse in C++

Beispielprogramm: KLASSE1.CPP

Das Programm KLASSE1.CPP ist unser erstes Beispiel für eine Klasse in C++. Das ist das erste, mit Sicherheit aber nicht das letzte Beispiel, da die Klasse der Hauptgrund ist, warum wir C++ ANSI-C oder einer anderen (prozeduralen) Programmiersprache vorziehen. Wir verwenden das Schlüsselwort class in Zeile 4 in genau derselben Weise wie struct im letzten Beispiel. Diese beiden Konstrukte sind in der Tat auch sehr ähnlich. Es gibt einen wesentlichen Unterschied, einstweilen wollen wir uns aber mit den Ähnlichkeiten beschäftigen.

Tier in Zeile 4 ist der Name der Klasse. Wenn wir Variablen dieses Typs definieren, können wir das Schlüsselwort class noch einmal verwenden wie in Zeile 15 oder es auch weglassen wie in den Zeilen 13 bis 15. In unserem letzten Programm haben wir fünf Variablen einer Struktur deklariert, in diesem Programm deklarieren wir aber fünf Objekte. Sie heißen Objekte, da ihr Typ eine Klasse ist. Die Unterschiede sind klein, aber fein, und wir werden später in dieser Einführung sehen, daß das Konzept der Klasse wirklich sehr wichtig und wertvoll ist. Hier haben wir die Klasse nur vorgestellt, um eine kleine Vorschau auf das zu geben, was Dich noch erwartet.

Einführung in C++ bringt Dich in Partnerschaft mit Amazon.de von Null auf Programmieren in ein paar Klicks.

Zum Beispiel einfach:

Schrödinger programmiert C++: Jetzt mit C++14 und Syntaxhighlighting
Das beste Programmierlernbuch — egal in welcher Sprache? Kann gut sein. Statt trocken ist Dieter Bärs Meisterstück lehrreich, statt mühsam beispielhaft beispielbehaftet, statt Nachschlagewerk (das ist es wirklich nicht) Nur-noch-ein-Bissi-Weitermachbuch und statt unverständlich sinnvoll das Verstehen (statt dem Memorisiern) fördernd erklärend.
›› Mehr C++-Bücher

Eine Klasse ist ein Typ, den man verwendet, um Objekte zu definieren gerade so wie man eine Struktur verwendet, um Variablen zu definieren. Dein Hund Rex ist eine spezielle Instanz der umfassenden Klasse der Hunde. Ähnlich verhält es sich mit Objekten und Klassen: ein Objekt ist eine spezielle Instanz einer Klasse. Die Klasse ist ein so generalisiertes Konzept, daß Bibliotheken mit vorgefertigten Klassen erhältlich sind. Du kannst Klassen kaufen, die solche Operationen durchführen wie etwa die Verwaltung von Stapeln (stacks), Warteschlangen (queues) oder Listen, das Sortieren von Daten, das Fenster-Management usw. Das ist durch die allgemeine Anwendbarkeit und Flexibilität der Klasse möglich.

Das Schlüsselwort public in Zeile 6 ist notwendig, da die Variablen einer Klasse standardmäßig privat, das heißt von außen nicht zugänglich sind. Indem wir sie mit dem Schlüsselwort public öffentlich machen, können wir auf sie zugreifen. Mach Dir über dieses Programm jetzt nicht zu viele Gedanken, wir werden all das später relativ genau behandeln. Kompiliere das Programm und führe es aus, um zu sehen, ob es auch das tut, was wir wollen. Bedenke, daß das Dein erster Kontakt mit einer Klasse überhaupt ist und im Grund gar nichts von dem illustriert, was dieses so mächtige Element von C++ ausmacht.

Die freie Union von C++

Beispielprogramm: UNION.CPP

Das Beispielprogramm UNION.CPP zeigt eine freie Union. Während in ANSI-C alle Unionen einen Namen haben müssen, ist dies in C++ nicht notwendig. In C++ können wir eine freie Union, eine namenlose Union verwenden. Die Union ist in eine einfache Struktur eingebettet und Du hast sicher bemerkt, daß auf die Deklaration der Union in Zeile 13 kein Variablenname folgt. In ANSI-C hätten wir die Union benennen und dreifache Namen (drei Namen mit Punkten dazwischen) vergeben müssen, um auf die Mitglieder der Union Zugriff zu haben. Da es sich hier aber um eine freie Union handelt gibt es keinen Namen der Union und daher genügt auch ein doppelter Name, um auf die Mitglieder zuzugreifen, wie unter anderem die Zeilen 20, 24 und 28 zeigen.

Du wirst Dich daran erinnern, daß eine Union alle ihre Daten auf derselben Stelle im Speicher ablegt, sodaß effektiv immer nur eine Variable verfügbar ist. Genau das geschieht auch hier. Die Variablen mit den Namen Tankinhalt, Bomben und Paletten werden an derselben Stelle gespeichert und es obliegt der Programmiererin, Buch zu führen, welche der Variablen denn nun gerade dort gespeichert wird. Dem Transporter wird in Zeile 28 ein Wert für Paletten zugewiesen, in Zeile 30 dann ein Wert für Tankinhalt. Wenn wir den Wert für Tankinhalt zuweisen, geht der Wert für Paletten verloren und ist nicht mehr verfügbar, da er ja dort gespeichert war, wo jetzt Tankinhalt abgelegt ist. Unionen werden also in C++ genauso verwendet wie in C, die Benennung der Komponenten ausgenommen.

Den Rest des Programmes verstehst Du sicherlich mit Leichtigkeit. Kompiliere es und führe es aus.

C++ Typenumwandlung

Beispielprogramm: TYPENUW.CPP

Das Programm TYPENUW.CPP gibt einige Beispiele für die Typenumwandlung in C++. Du kannst die Typenumwandlungen in C++ genauso wie in C machen, C++ eröffnet Dir aber auch noch eine andere Möglichkeit.

In den Zeilen 10 bis 17 verwenden wir die bekannte Form des "cast" aus ANSI-C, nichts Neues für die erfahrene C Programmiererin. Bei etwas genauerem Hinsehen stellt sich heraus, daß die Zeilen 10 bis 13 alle dasselbe bewirken. Der einzige Unterschied ist, daß wir den Compiler in einigen Anweisungen zwingen, die Typenumwandlung vor der Addition und der Zuweisung zu machen. In Zeile 13 wird die Variable vom Typ int vor der Addition in den Typ float konvertiert, die resultierende Variable vom Typ float wird dann nach char konvertiert bevor sie der Variablen c zugewiesen wird.

Weitere Beispiele für Typenumwandlungen findest Du in den Zeilen 15 bis 17. Alle drei Anweisungen sind im Grunde gleich.

Einführung in C++ bringt Dich in Partnerschaft mit Amazon.de von Null auf Programmieren in ein paar Klicks.

Zum Beispiel wandelbar wunderbar:

Schrödinger programmiert C++: Jetzt mit C++14 und Syntaxhighlighting
Das beste Programmierlernbuch — egal in welcher Sprache? Kann gut sein. Statt trocken ist Dieter Bärs Meisterstück lehrreich, statt mühsam beispielhaft beispielbehaftet, statt Nachschlagewerk (das ist es wirklich nicht) Nur-noch-ein-Bissi-Weitermachbuch und statt unverständlich sinnvoll das Verstehen (statt dem Memorisiern) fördernd erklärend.
›› Mehr C++-Bücher

Die Beispiele in den Zeilen 19 bis 26 sind C++-spezifisch und in ANSI-C nicht erlaubt. In diesen Zeilen werden die Typenumwandlungen notiert als seien sie Funktionsaufrufe anstatt der bekannteren "cast" Methode. Die Zeilen 19 bis 26 sind identisch mit den Zeilen 10 bis 17.

Du wirst diese Methode der Typenumwandlung möglicherweise klarer und einfacher zu verstehen finden als die Methode des "cast" und in C++ darfst Du auch beide anwenden. Du darfst die beiden Typenumwandlungen auch mischen, der Code kann dadurch aber sehr schwer verständlich werden.

Kompiliere das Programm und führe es aus.

Programmieraufgaben

  1. Vom Programm AUFZ.CPP ausgehend füge dem Aufzählungstyp Spielausgang den Wert STRAFE hinzu. Erweitere das Programm auch um eine Nachricht und die Funktionalität, diese Nachricht auszugeben.
  2. Erweitere das Programm KLASSE1.CPP um die Variable Hoehe vom Typ float und speichere beliebige Werte in dieser Variable. Gib einige der Werte aus. Setze die neue Variable dann vor das Schlüsselwort public:. Was für Fehlermeldungen erhältst Du? Wir werden uns diesem Fehler in Kapitel 5 dieser Einführung widmen.

(weiter »)

Einführung in C++ bringt Dich in Partnerschaft mit Amazon.de von Null auf Programmieren in ein paar Klicks.

Zum Beispiel Typen:

Effektives modernes C++
So schwer ist das Programmieren nicht, wie Du hoffentlich auch an und in dieser Einführung siehst. Und auch bessere Programme schreiben ist leichter als man glaubt, wenn man den Meyers intus hat.
›› Mehr C++-Bücher

[ Form ]