Leseprobe. »Eine erste EinführungArbeiten mit Zahlen und OperatorenVererbung und Polymorphie« Inhaltsverzeichnis. Index. Der Autor

Größe: px
Ab Seite anzeigen:

Download "Leseprobe. »Eine erste EinführungArbeiten mit Zahlen und OperatorenVererbung und Polymorphie« Inhaltsverzeichnis. Index. Der Autor"

Transkript

1 Wissen, wie s geht. Leseprobe C++-Programmierung leicht gemacht! Diese Leseprobe zeigt, wie es geht: Kleinschrittige Lerneinheiten, Beispiele und Übungen machen das Lernen einfach. Dabei wird auf weitestgehende Plattformunabhängigkeit geachtet: Arbeiten Sie mit der Entwicklungsumgebung, mit der Sie am besten zurechtkommen.»eine erste EinführungArbeiten mit Zahlen und OperatorenVererbung und Polymorphie«Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Thomas Theis Einstieg in C++ Ideal für Programmiereinsteiger 516 Seiten, broschiert, September ,90 Euro, ISBN

2 Kapitel 1 Eine erste Einführung 1 Die Sprache C++ ist weit verbreitet, wird vielfältig genutzt und zählt schon lange zu den wichtigsten Programmiersprachen. Nachdem wir als Erstes geklärt haben, wie wir mit C++ arbeiten und welcher C++-Standard für uns wichtig ist, schreiben wir bereits das erste Programm. 1.1 Was machen wir mit C++? C++ ermöglicht uns, rein objektorientiert zu programmieren, also mit Klassen, Objekten, Eigenschaften und Methoden. Objektorientierung Als Vorbereitung dazu werden wir mit C++ zunächst klassisch prozedural arbeiten, also mit Datentypen, Operatoren, Kontrollstrukturen und Funktionen starten. Auf diese Weise erhalten Sie eine solide Grundlage, die Ihnen anschließend den Einstieg in die Objektorientierung erleichtert. Alle genannten Begriffe lernen Sie ausführlich kennen. Grundlagen Es gibt zahlreiche Bibliotheken, die die Möglichkeiten von C++ erweitern. Die Sprache C++ ist ursprünglich als Weiterentwicklung zu der Sprache C entstanden. Aufgrund der Verwandtschaft ist es auch in C++ möglich, hardware-orientierte schnelle Programme zu entwickeln. Bibliotheken Hinweis Im Buch wird nur mit vollständigen lauffähigen Beispielen gearbeitet. Sie finden sie auch im Downloadbereich zum Buch unter der Adresse www. rheinwerk-verlag.de/4361. Beispiele 17

3 1 Eine erste Einführung 1.4 So sieht das erste Programm aus IDE 1.2 Was benötige ich zum Programmieren? Für die Betriebssysteme Windows, Ubuntu Linux und macos gibt es eine Reihe von frei verfügbaren IDEs (kurz für: Integrated Development Environment, dt.: Integrierte Entwicklungsumgebung), die Ihnen das bieten, was Sie als angehender C++-Programmierer benötigen: Für die Entwicklung von Programmen mit Benutzeroberflächen (siehe Kapitel 16,»Grafische Benutzeroberflächen mit der Qt-Bibliothek«) und für den Zugriff auf Datenbanken (siehe Kapitel 17,»Datenbanken mit SQLite verwalten«) wird die betriebssystemunabhängige Entwicklungsumgebung Qt genutzt. Seit der Version 5.7 von Juni 2016 baut Qt vollständig auf C++11 auf. Qt 1 Editor Compiler Debugger einen Editor, mit dessen Hilfe Sie den Programmcode schreiben einen Compiler, mit dessen Hilfe Sie den Programmcode in die Sprache übersetzen, die der jeweilige Rechner versteht einen Debugger, der Ihnen bei der Fehlersuche hilft Falls Sie weitere Informationen zur Sprache C++ und der Zuordnung ihrer Elemente zu den verschiedenen Versionen benötigen, empfehle ich die C++-Referenz unter der folgenden Adresse: C++-Referenz Viele Editoren bieten zur Erleichterung ein sogenanntes Syntax-Highlighting, also ein farbliches Hervorheben der Elemente von C So sieht das erste Programm aus Installation Die Installation und vor allem die Nutzung verschiedener Entwicklungs- In diesem Abschnitt lernen Sie das erste C++-Programm kennen. Es geht Aufbau umgebungen (unter anderem Eclipse, NetBeans, Xcode und Orwell Dev C++) zunächst nur um das Verständnis für den Aufbau des Programms. Es wird für Windows, Ubuntu Linux und macos werden in Anhang A,»Installatio- eine Reihe von Begriffen eingeführt. Ihre Bedeutung wird erläutert, zudem nen«, beschrieben. werden sie Ihnen im Verlauf des Buchs immer vertrauter. Das nachfolgende Programm gibt den Text Hallo Welt auf dem Bildschirm Hallo Welt Standards 1.3 Die Entwicklung von C++ C++ wurde im Jahre 1979 von Bjarne Stroustrup entwickelt. Über die Jahre hinweg hat die Sprache viele Neuerungen erfahren. Im Jahre 1998 erschien aus, gefolgt von einem Zeilenumbruch: #include <iostream> using namespace std; die standardisierte Version C++98. Weitere Verbesserungen sind mit den Standards C++03, C++11 und C++14 in den Jahren 2003, 2011 und 2014 eingeflossen. Aktuell ist die Entwicklung der Version C++17 bereits weit fortgeschritten. int main() cout << "Hallo Welt" << endl; C++11 Sie sollten mit einer Umgebung arbeiten, die den Standard C++11 berück- Listing 1.1 Datei»hallo.cpp«Umsetzung Einsteiger sichtigt. In Anhang A,»Installationen«, wird die Installation der verschiedenen Entwicklungsumgebungen beschrieben inklusive der Einstellungen für diesen Standard. Einige Gründe für C++11: Die verfügbaren C++-Compiler setzen zwar meist vollständig die Standards bis einschließlich C++11 um, aber nicht immer alle Bestandteile der nachfolgenden Versionen. Die Standards bis einschließlich C++11 enthalten im Gegensatz zu den nachfolgenden Versionen sehr viele Neuerungen, die auch für den Einsteiger interessant sind. Die entscheidende Zeile des Programms beginnt mit cout. Das Objekt cout dient zur Ausgabe von Daten auf dem Bildschirm. Der Operator << versorgt das Objekt cout mit den Informationen, die angezeigt werden. Zunächst wird der Text Hallo Welt ausgegeben. Texte werden in doppelten Anführungsstrichen notiert. Nach dem Text folgt der Manipulator endl, der einen Zeilenumbruch erzeugt. Manipulatoren dienen zur Gestaltung der Ausgabe. Mehr dazu in Abschnitt 2.5,»Zahlen formatieren mit Manipulatoren«. Der Begriff endl steht abkürzend für End of Line (dt.: Ende der Zeile). cout endl 18 19

4 1 Eine erste Einführung 1.5 Kommentieren Sie Ihre Programme main() Ein einfaches Programm besteht aus einer oder mehreren Anweisungen innerhalb der Funktion main(), die der Reihe nach ausgeführt werden. Jede Anweisung wird durch ein Semikolon am Ende begrenzt. Die Zeile mit cout /* Ein Kommentar über mehrere Zeilen */ cout << "Hallo Welt" << endl; 1 beinhaltet eine Anweisung. Der Aufbau der Funktion main() beginnt mit int main(). Die Bedeutung von int und den runden Klammern werden Sie noch kennenlernen. Nach den // Ein einzeiliger Kommentar cout << "Das ist die zweite Zeile" << endl; runden Klammern folgen die Anweisungen der Funktion main() innerhalb von geschweiften Klammern. Sie erreichen sie über die Tastenkombinationen (Alt_Gr) + (7) beziehungsweise (Alt_Gr) + (0). Es empfiehlt sich, die Anweisungen wie im vorliegenden Fall einzurücken. Sie erhöhen damit die cout << "Ende" << endl; Listing 1.2 Datei»kommentar.cpp«// Ende des Programms iostream, std Lesbarkeit Ihrer Programme. Die Bibliothek iostream ermöglicht die Ausgabe auf dem Bildschirm und die Eingabe von der Tastatur. Sie muss mithilfe von #include <iostream> eingebunden werden. Das Objekt cout und der Manipulator endl stammen aus dem Namensraum (engl.: namespace) std. Seine Benutzung muss mithilfe der Anweisung using namespace std; bekannt gemacht werden. Sie können einen längeren Kommentar über mehrere Zeilen notieren. Er muss innerhalb der Zeichenkombinationen /* und */ stehen. Ein kurzer Kommentar nach der Zeichenkombination // erstreckt sich nur bis zum Ende der Zeile. Ein Kommentar kann auch nach einer Anweisung in derselben Zeile beginnen. Das Programm gibt drei Zeilen aus: /* */ und // Hinweis In Anhang A,»Installationen«, wird erläutert, wie Sie Ihre Entwicklungsumgebung unter Ihrem Betriebssystem nutzen können. Sie geben darin das Programm ein, speichern es in der Datei hallo.cpp, übersetzen es und führen es aus. Hallo Welt Das ist die zweite Zeile Ende 1.5 Kommentieren Sie Ihre Programme Erläuterung Es kann sein, dass Sie sich selbst nach längerer Zeit wieder mit einem Ihrer Programme beschäftigen oder eines Ihrer Programme an einen anderen Entwickler weitergeben. In diesen Fällen sind Kommentare innerhalb Ihrer Programme sehr nützlich. Sie werden nicht übersetzt und dienen nur zur Erläuterung des Ablaufs. Im nachfolgenden Programm sehen Sie einige Kommentare: #include <iostream> using namespace std; int main() 20 21

5 Kapitel 2 Arbeiten mit Zahlen und Operatoren 2 Sie speichern Zahlenwerte, geben sie auf dem Bildschirm aus, lesen sie von Tastatur ein und rechnen mit ihnen. Innerhalb eines Programms können sowohl Zahlen als auch Texte in sogenannten Variablen gespeichert werden. Die Zahlen und Texte können aus Eingaben des Benutzers stammen. Sie können aber auch Ergebnisse und andere Informationen beinhalten, die das Programm ermittelt hat. Variablen 2.1 Wie speichere ich Zahlen? Zunächst geht es nur um die Arbeit mit Zahlen. Es gibt ganze Zahlen ohne Stellen nach dem Komma und Fließkommazahlen mit Stellen nach dem Komma. Variablen zur Speicherung besitzen einen Datentyp, zum Beispiel int für ganze Zahlen und double für Fließkommazahlen. Zudem besitzen Variablen individuelle Namen, mit denen sie eindeutig voneinander unterschieden werden. int, double Nehmen wir an, wir möchten die Daten eines Einkaufs festhalten. Es werden zwei Exemplare eines Artikels erworben, der einen bestimmten Preis hat. Mit dem nachfolgenden Programm speichern wir diese Informationen und geben sie auf dem Bildschirm aus: Anzahl, Preis #include <iostream> using namespace std; int main() int anzahl; double preis; anzahl = 2; preis = 1.45; 23

6 2 Arbeiten mit Zahlen und Operatoren 2.2 Rechnen mit Operatoren cout << "Anzahl: " << anzahl << endl; cout << "Preis: " << preis << " Euro" << endl; Listing 2.1 Datei»datentyp_einfach.cpp«camelCase-Schreibweise verwenden. Dabei besteht ein Name aus mehreren Wörtern, die ohne Leerzeichen nacheinander notiert werden. Der erste Buchstabe des zweiten und aller folgenden Wörter wird großgeschrieben. Ein Beispiel: anzahlapfelrot. 2 Deklaration Zunächst erfolgt eine Deklaration. Sie dient dazu, dem Programm die genutzten Variablen bekannt zu machen. Im vorliegenden Programm werden die Variable anzahl vom Datentyp int und die Variable preis vom Datentyp Falls Sie einer Variablen keinen Wert zuweisen, besitzt sie einen zufälligen Wert. Bei einer Berechnung oder einer Ausgabe führt das zu nicht vorhersagbaren Ergebnissen. Zufälliger Wert double deklariert. Zuweisung Es folgen zwei Zuweisungen: anzahl erhält den ganzzahligen Wert 2 und preis den Fließkommawert Beachten Sie, dass ein Punkt als Dezimal- 2.2 Rechnen mit Operatoren Ausgabe trennzeichen verwendet werden muss. Bei einer Zuweisung erhält die Variable auf der linken Seite des Zeichens = den Wert, der sich auf der rechten Seite des Gleichheitszeichens ergibt. Die Ausgabe auf dem Bildschirm erfolgt mithilfe von cout. Dabei werden nacheinander mehrere Texte und die Werte der genannten Variablen ausgegeben, jeweils getrennt durch den Operator <<. Die Ausgabe des Programms: Zur Durchführung von Berechnungen stehen Ihnen die Operatoren + für die Addition, - für die Subtraktion, * für die Multiplikation und / für die Division zur Verfügung. Rechenausdrücke mit mehreren Operatoren werden von links nach rechts bearbeitet. Wie in der Mathematik werden Ausdrücke, die innerhalb von runden Klammern stehen, vorrangig berechnet. Zudem gilt: Punktrechnung (*, /) vor Strichrechnung (+, -). Operatoren + - * / Punkt- vor Strichrechnung Anzahl: 2 Preis: 1.45 Euro Im nachfolgenden Programm werden einige Berechnungen mit den Daten eines Einkaufs durchgeführt. Dabei werden 2 Äpfel à 1.45 und 4 Birnen à Dezimalpunkt Wie Sie sehen, wird sowohl im Programmcode als auch in der Ausgabe ein 0.85 erworben. Namensregeln camelcase Punkt als Dezimaltrennzeichen verwendet. Zum besseren Verständnis arbeite ich daher auch im erläuternden Text mit dem Dezimalpunkt. Einige Hinweise Der Name einer Variablen muss gemäß den Namensregeln von C++ gebildet werden: Er muss mit einem Buchstaben oder einem Unterstrich beginnen. Anschließend dürfen Buchstaben, Zahlen oder Unterstriche folgen. Zwischen Groß- und Kleinschreibung wird unterschieden. Nicht vorkommen dürfen zum Beispiel: Leerzeichen, Sonderzeichen, die deutschen Umlaute (ä, ö, ü) oder das scharfe ß. Der Name sollte keinem Schlüsselwort der Sprache C++ entsprechen, siehe Abschnitt B.2.4,»Schlüsselwörter der Sprache C++«. Er sollte etwas über den Inhalt einer Variablen aussagen, damit die Lesbarkeit eines Programms verbessert wird. Bei längeren Namen sollten Sie die #include <iostream> using namespace std; int main() int anzahlapfel = 2, anzahlbirne = 4; double preisapfel = 1.45, preisbirne = 0.85; double summe, mittel, anteil, differenz; summe = anzahlapfel * preisapfel + anzahlbirne * preisbirne; mittel = summe / (anzahlapfel + anzahlbirne); anteil = * anzahlbirne / (anzahlapfel + anzahlbirne); differenz = preisapfel - preisbirne; cout << "Summe: " << summe << " Euro" << endl; cout << "Mittlerer Preis: " << mittel << " Euro" << endl; 24 25

7 2 Arbeiten mit Zahlen und Operatoren 2.3 Fehler suchen cout << "Anteil: " << anteil << " %" << endl; cout << "Differenz: " << differenz << " Euro" << endl; In Abschnitt 2.5,»Zahlen formatieren mit Manipulatoren«, wird erläutert, wie Sie die Anzahl der Stellen nach dem Komma einstellen. In obigem Programm wird die Anzahl aller Artikel zweimal berechnet. Normalerweise be- 2 Listing 2.2 Datei»operator_rechnen.cpp«rechnet man ein solches Zwischenergebnis nur einmal und speichert es dann in einer eigenen Variablen. Hier wird aber die Bedeutung der runden Initialisierung Die double-variablen summe, mittel, anteil und differenz werden zur Spei- Klammern gezeigt. Punkt- vor Strichrechnung cherung der Rechenergebnisse benötigt. Mehrere Variablen desselben Datentyps können innerhalb einer Anweisung deklariert werden. Falls der Wert einer Variablen zu Beginn des Programms bekannt ist, kann er bereits bei der Deklaration zugewiesen werden. Dieser Vorgang wird auch Initialisierung genannt. Zunächst wird der Gesamtbetrag für diesen Einkauf berechnet und in der Variablen summe gespeichert. Die Reihenfolge: Erst werden die beiden Mul- Hinweis Eine längere Anweisung kann sich über mehrere Zeilen erstrecken, wie Sie bei der Berechnung des Gesamtbetrags sehen. Der notwendige Zeilenumbruch kann an vielen Stellen erfolgen, allerdings zum Beispiel nicht innerhalb des Namens einer Variablen oder innerhalb eines Textes, der in Anführungsstrichen steht. Längere Anweisung tiplikationen durchgeführt, dann die Addition, dann die Zuweisung an die Variable summe. Runde Klammern Der mittlere Preis eines Artikels bei diesem Einkauf ergibt sich aus dem Ge- 2.3 Fehler suchen Ganzzahl-Division samtbetrag, geteilt durch die Anzahl aller Artikel. Die Addition muss innerhalb von runden Klammern stehen, ansonsten würde die Division als Erstes ausgeführt werden. Falls man die Anzahl der Birnen durch die Anzahl aller Artikel teilt, ergibt sich der zahlenmäßige Anteil der Birnen am Einkauf. Das Problem dabei: Es handelt sich um eine Division von zwei ganzen Zahlen. Dabei werden in C++ die Stellen nach dem Komma abgeschnitten. Im vorliegenden Fall ergäbe sich der Wert 0. Wir müssen also dafür sorgen, dass an der Division mindestens ein Fließkommawert beteiligt ist, zum Beispiel durch die Multiplikation des ersten Werts mit dem Fließkommawert 1.0. Da wir das Ergebnis ohnehin mit 100 multiplizieren müssen, um den Anteil in Prozent zu erhalten, schlagen wir zwei Fliegen mit einer Klappe: Wir multiplizieren den ersten Wert mit Als Letztes wird die Preisdifferenz zwischen Äpfeln und Birnen berechnet. Es folgt die Ausgabe der Ergebnisse: Sollte eines Ihrer Programme unerwartete Ergebnisse haben, so sollten Sie sich auf die Suche nach dem Fehler machen und diesen beseitigen. Das sogenannte Debugging kann Ihnen dabei helfen. Ich beschreibe es anhand der Entwicklungsumgebung Eclipse. In den anderen Umgebungen läuft es in ähnlicher Art und Weise. Ich stelle es Ihnen bereits jetzt in einfacher Version vor, damit Sie sich an die Handhabung gewöhnen. Sie können Ihr Programm schrittweise ablaufen lassen, um die Werte bestimmter Variablen zu unterschiedlichen Zeitpunkten des Programms zu kontrollieren. In Abschnitt 5.9,»Fehler suchen«, kommen weitere Möglichkeiten im Zusammenhang mit Funktionen hinzu. Laden Sie das Projekt mit dem Programm operator_rechnen.cpp aus Abschnitt 2.2,»Rechnen mit Operatoren«, in Eclipse. Setzen Sie den Cursor zum Beispiel in die Zeile, in der die Variable mittel ihren Wert erhält. Nach Aufruf des Menüpunkts Run Toggle Breakpoint (Tastenkombination (Strg) + (ª) + (B)) erscheint vor der Zeile ein kleiner blauer Punkt. Die be- Debugging Werte kontrollieren Haltepunkt setzen Summe: 6.3 Euro Mittlerer Preis: 1.05 Euro Anteil: % Differenz: 0.6 Euro treffende Zeile dient nun als Haltepunkt. Sie können innerhalb eines Programms mehrere Haltepunkte setzen. In Abbildung 2.1 sehen Sie das genannte Programm mit zwei Haltepunkten

8 2 Arbeiten mit Zahlen und Operatoren 2.4 Wie können Daten eingegeben werden? Haltepunkt entfernen Falls Sie den Menüpunkt in derselben Zeile noch einmal aufrufen, wird der Haltepunkt wieder entfernt. Der Menüpunkt Run Remove all Breakpoints entfernt alle gesetzten Haltepunkte auf einmal. Bei der normalen Ausführung des Programms mithilfe des Menüpunkts Run Run (Tastenkombination (Strg) + (F11)) ändert sich durch die Haltepunkte noch nichts. 2 Abbildung 2.2 Kontrolle des Werts Falls Sie bereits Haltepunkte gesetzt haben, können Sie sich durch Aufruf des Menüpunkts Run Run to Line (Tastenkombination (Strg) + (R)) von Haltepunkt zu Haltepunkt bewegen. Das ermöglicht Ihnen, in schnellen Schritten die wichtigen Zeilen des Programms anzusteuern. Sie können das Debugging jederzeit abbrechen mithilfe des Menüpunkts Run Terminate (Tastenkombination (Strg) + (F2)). Sprung zum Haltepunkt Debugging beenden Debug-Modus Schritt für Schritt Werte kontrollieren Abbildung 2.1 Zwei Haltepunkte Falls Sie den Menüpunkt Run Debug wählen (Funktionstaste (F11)), wechselt das Programm in den Debug-Modus. Sie werden gefragt, ob Sie in eine andere Ansicht wechseln möchten. Ich bin aus Gründen der Übersicht in der gewohnten Ansicht geblieben. Die erste Zeile des Programms ist nun farbig unterlegt. Das ist die aktuelle Zeile, in der das Programm zurzeit steht. Durch Aufruf des Menüpunkts Run Step Into (Funktionstaste (F5)) können Sie sich schrittweise durch das Programm bewegen. Die farbige Unterlegung wandert dabei mit der aktuellen Zeile. Falls Ausgaben getätigt werden, sind diese bereits im Ausgabefenster sichtbar. Sie können sich jederzeit die Werte ansehen, die die verschiedenen Variablen vor der aktuellen farbig unterlegten Zeile haben. Lassen Sie dazu die Maus über dem Namen der betreffenden Variablen»schweben«. In Abbildung 2.2 ist die Zeile 12 aktuell. Die Variable mittel hat zuvor bereits ihren Wert von 1.05 erhalten. Die Maus schwebt (im Buch nicht sichtbar) über den Namen der Variablen mittel. 2.4 Wie können Daten eingegeben werden? Zur Eingabe von Daten durch den Benutzer des Programms werden das Objekt cin und der Operator >> benötigt. Vor einer Eingabe sollten Sie den Benutzer mithilfe einer Eingabeaufforderung darüber informieren, welche Daten er über die Tastatur eingeben soll. Im nachfolgenden Programm wird der Benutzer dazu aufgefordert, erst eine Anzahl und anschließend einen Preis in Euro einzugeben: #include <iostream> using namespace std; int main() int anzahl; double preis; cout << "Anzahl eingeben: "; cin >> anzahl; cin 28 29

9 2 Arbeiten mit Zahlen und Operatoren 2.5 Zahlen formatieren mit Manipulatoren cout << "Preis in Euro eingeben: "; cin >> preis; cout << "Anzahl: " << anzahl << endl; cout << "Preis: " << preis << " Euro" << endl; Listing 2.3 Datei»zahl_eingabe.cpp«Die Ausgabe des Programms mit möglichen Eingaben des Benutzers: Anzahl eingeben: 12 Preis in Euro eingeben: 1.65 Anzahl: 12 Preis: 1.65 Euro Die Eingabeaufforderung endet häufig nicht mit einem Zeilenumbruch, sondern mit einem Leerzeichen. Der Benutzer kann dadurch seine Eingabe unmittelbar hinter der zugehörigen Aufforderung tätigen. mal mit sechs Stellen. Bei einem Währungsbetrag bietet sich eine einheitliche Ausgabe mit zwei Nachkommastellen an. In nachfolgendem Programm sehen Sie einige Möglichkeiten der Formatierung mithilfe von Manipulatoren: #include <iostream> #include <iomanip> using namespace std; int main() double preis = 1.4; cout << preis << " Euro" << endl; cout << setw(8) << preis << " Euro" << endl; cout << setfill('.'); cout << setw(8) << preis << " Euro" << endl; 2 Programm hält an Das Programm hält aufgrund der Anweisung mit cin an. Es erwartet eine Eingabe des Benutzers mit anschließender Betätigung der Taste ( ). Erst cout << fixed << setprecision(2); cout << setw(8) << preis << " Euro" << endl; Gültige Eingaben dann läuft das Programm weiter. Auch bei der Eingabe einer Fließkommazahl muss der Dezimalpunkt gesetzt werden. Zur Vereinfachung gehen wir in den ersten Programmen davon aus, dass der Benutzer gültige Eingaben tätigt, also zum Beispiel keine Buchstaben eingibt. In Abschnitt 7.5,»Wie verarbeite ich Eingaben?«, wird erläutert, wie cout << left; cout << setw(8) << preis << " Euro" << endl; Listing 2.4 Datei»manipulator.cpp«Sie ungültige Eingaben abfangen und verarbeiten können. Es muss der Header iomanip für die Nutzung der Manipulatoren eingebun- iomanip Hinweis den werden. Zunächst die Ausgabe des Programms: Datenstrom Die Operatoren << und >> deuten die Richtung des Datenstroms an. Beim Operator << strömen die Daten zum cout, also zur Ausgabe. Beim Operator << strömen die Daten von der Eingabe mit cin in die Variable. 1.4 Euro 1.4 Euro Euro Euro Euro Formatierte Ausgabe 2.5 Zahlen formatieren mit Manipulatoren Manipulatoren bieten Ihnen die Möglichkeit, Zahlen formatiert auszugeben. Ein Beispiel: Fließkommazahlen werden standardmäßig mit der vorhandenen Anzahl an Nachkommastellen ausgegeben, dabei jedoch maxi- Zunächst erfolgt eine unformatierte Ausgabe. Die Funktion setw() führt zu einer Einstellung der Mindestbreite, allerdings nur für die unmittelbar nachfolgende Ausgabe. Hier wird der Wert der Variablen preis auf einer Breite von acht Stellen ausgegeben, standard- setw() 30 31

10 2 Arbeiten mit Zahlen und Operatoren 2.6 Zuweisungen kürzer schreiben mäßig rechtsbündig. Die verbleibenden fünf Stellen vor den drei Zeichen anzahl /= 2; cout << "/= 2 ergibt " << anzahl << endl; setfill() fixed 1.4 werden standardmäßig mit Leerzeichen aufgefüllt. Mithilfe der Funktion setfill() wählen Sie ein Füllzeichen für die Auffüllung auf die Mindestbreite. Die Funktion wirkt bis zum nächsten Aufruf von setfill(), maximal für den restlichen Verlauf des Programms. Die Angabe fixed dient zur Einstellung der dezimalen Notation, also der gewohnten Ausgabe von Fließkommazahlen. Die Angabe wirkt maximal für den restlichen Verlauf des Programms. Die Einstellung kann zum Beispiel anzahl++; anzahl--; ++anzahl; --anzahl; Listing 2.5 Datei»operator_zuweisung.cpp«cout << "++ ergibt " << anzahl << endl; cout << "-- ergibt " << anzahl << endl; cout << "++ ergibt " << anzahl << endl; cout << "-- ergibt " << anzahl << endl; 2 durch die Angabe scientific geändert werden, zur Einstellung der wissenschaftlichen Notation. Diese nutzt zum Beispiel Exponenten bei sehr kleinen oder sehr großen Zahlen. Dazu mehr in Abschnitt 2.7.2,»Datentypen für Fließkommazahlen«. Die Anweisung anzahl+=5; nutzt den kombinierten Zuweisungsoperator +=. Sie stellt eine verkürzte Form der Anweisung anzahl=anzahl+5; dar, also der Erhöhung des Werts der Variablen anzahl um 5. Auf diese Weise können Sie besonders bei langen Variablennamen die Lesbarkeit eines Programms Operator += setprecision() left Nach der Angabe fixed können Sie mithilfe der Funktion setprecision() die Anzahl der Nachkommastellen einstellen. Die Zahl wird nur für die Ausgabe auf diese Stellenzahl gerundet. Ihr gespeicherter Wert bleibt unverändert. Die Funktion wirkt bis zum nächsten Aufruf von setprecision(), maximal für den restlichen Verlauf des Programms. Die Angabe left dient zur Einstellung der linksbündigen Ausgabe im Zusammenhang mit einer Mindestbreite. Die Angabe wirkt maximal für den verbessern. Entsprechendes gilt für die weiteren kombinierten Zuweisungsoperatoren -=, *= und /=. Der Inkrement-Operator ++ führt zu einer Erhöhung des Werts einer Variablen um 1. anzahl=anzahl+1 wird also verkürzt. anzahl=anzahl-1 wird durch den Dekrement-Operator -- verkürzt. Es folgt die Ausgabe des Programms: Operatoren Kombinierte Operatoren restlichen Verlauf des Programms. Die Einstellung kann zum Beispiel durch die Angabe right geändert werden, zur Einstellung der rechtsbündigen Ausgabe. 2.6 Zuweisungen kürzer schreiben Sie haben die Möglichkeit, Zuweisungen mithilfe von kombinierten Operatoren zu verkürzen wie in nachfolgendem Programm: Wert 2 += 5 ergibt 7 -= 3 ergibt 4 *= 4 ergibt 16 /= 2 ergibt 8 ++ ergibt 9 -- ergibt 8 ++ ergibt 9 -- ergibt 8 #include <iostream> using namespace std; int main() intanzahl=2; anzahl += 5; anzahl -= 3; anzahl *= 4; cout<<"wert"<<anzahl<<endl; cout << "+= 5 ergibt " << anzahl << endl; cout << "-= 3 ergibt " << anzahl << endl; cout << "*= 4 ergibt " << anzahl << endl; Einige Hinweise Die Anweisungen b=++a; und b=a++; haben unterschiedliche Auswirkungen, da die Zuweisung an b einmal vor und einmal nach der Erhöhung von a stattfindet. Erfahrene Programmierer schreiben gerne solche oder noch längere Anweisungen mit den Operatoren ++ und --. Für Einsteiger vermindert das allerdings die Lesbarkeit von Programmen. Daher empfehle ich Ihnen zunächst, die Operatoren ++ und -- nur so einzusetzen, wie Sie es in meinem Programm sehen, und nicht in längeren Ausdrücken und Zuweisungen. Lesbarkeit 32 33

11 2 Arbeiten mit Zahlen und Operatoren 2.7 Mehr über die Speicherung von Zahlen Semikolon Zur besseren Übersicht stehen in diesem Programm jeweils zwei Anweisungen in einer Zeile. Das ist kein Problem, denn das Semikolon kennzeichnet das Ende der Anweisung. cout << "unsigned short: " << sizeof(unsigned short) << " Byte, "; cout << "von 0 bis " << USHRT_MAX << endl; Mehr über die Speicherung von Zahlen cout << "int: " << sizeof(int) << " Byte, "; cout << "von " << INT_MIN << " bis " << INT_MAX << endl; Sie können an dieser Stelle bereits mit dem nächsten Kapitel fortfahren und die weiteren Abschnitte dieses Kapitels bei Bedarf später bearbeiten. cout << "unsigned int: " << sizeof(unsigned int) << " Byte, "; cout << "von 0 bis " << UINT_MAX << endl; Speicherbedarf, Wertebereich Sie dienen der Ergänzung Ihres Wissens. Für ganze Zahlen werden häufig Variablen des Datentyps int genutzt. Es gibt aber noch weitere ganzzahlige Datentypen. Ihre Gemeinsamkeit: Gan- cout << "long: " << sizeof(long) << " Byte, "; cout << "von " << LONG_MIN << " bis " << LONG_MAX << endl; ze Zahlen werden in den Variablen mathematisch genau gespeichert. Die verschiedenen Datentypen unterscheiden sich im Speicherbedarf und im gültigen Wertebereich. cout << "unsigned long: " << sizeof(unsigned long) << " Byte, "; cout << "von 0 bis " << ULONG_MAX << endl; Genauigkeit Für Fließkommazahlen werden häufig Variablen des Datentyps double genutzt. Auch hier gibt es weitere Datentypen. Sie unterscheiden sich eben- Listing 2.6 Datei»datentyp_ganz.cpp«falls im Speicherbedarf und im gültigen Wertebereich. Zudem bieten sie eine unterschiedliche Genauigkeit. Sie sind allerdings niemals mathematisch genau. Es werden die ganzzahligen Datentypen char, short, int und long zusammen mit ihren vorzeichenlosen Varianten vorgestellt. Die Bezeichnung unsigned bedeutet vorzeichenlos, also ohne Vorzeichen. char, short, int, long unsigned Das Gegenteil von unsigned ist signed und bedeutet vorzeichenbehaftet, Ganzzahlige Datentypen Zunächst ein Programm mit den ganzzahligen Datentypen: also mit Vorzeichen. Variablen eines vorzeichenlosen Datentyps können nur den Wert 0 oder einen positiven Wert annehmen. Allerdings ist ihr Wertebereich doppelt so groß wie der Wertebereich des zugehörigen vor- #include <iostream> #include <climits> using namespace std; int main() cout << "char: " << sizeof(char) << " Byte, "; cout << "von " << CHAR_MIN << " bis " << CHAR_MAX << endl; zeichenbehafteten Datentyps. Der Operator sizeof liefert den Speicherbedarf des genannten Datentyps oder der genannten Variablen in Byte. Konstanten dienen zur Speicherung von unveränderlichen Werten. C++ stellt eine Reihe von Systemkonstanten zur Verfügung, unter anderem zur Speicherung der Grenzen der verschiedenen Wertebereiche. Sie werden sizeof Grenzen der Wertebereiche mithilfe des Headers climits zur Verfügung gestellt. In Abschnitt 2.8,»Fes- cout << "unsigned char: " << sizeof(unsigned char) << " Byte, "; cout << "von 0 bis " << UCHAR_MAX << endl; te Werte in Konstanten speichern«, sehen Sie, wie Sie eigene Konstanten definieren können. cout << "short: " << sizeof(short) << " Byte, "; cout << "von " << SHRT_MIN << " bis " << SHRT_MAX << endl; Der Datentyp char dient zur Speicherung von Zeichen. Intern wird dabei allerdings der Zeichencode, also eine ganze Zahl, gespeichert. char 34 35

12 2 Arbeiten mit Zahlen und Operatoren 2.7 Mehr über die Speicherung von Zahlen Die Angaben für den Speicherbedarf und den Wertebereich unterscheiden sich auch in Abhängigkeit von der genutzten Entwicklungsumgebung. Unter einem 32-Bit-System sehen Sie die folgende Ausgabe: cout << "1/7 in double: " << 1.0 / 7 << endl; cout << "1/7 in long double: " << 1.0L / 7 << endl; 2 char: 1 Byte, von -128 bis 127 unsigned char: 1 Byte, von 0 bis 255 short: 2 Byte, von bis unsigned short: 2 Byte, von 0 bis int: 4 Byte, von bis unsigned int: 4 Byte, von 0 bis long: 4 Byte, von bis unsigned long: 4 Byte, von 0 bis In Abhängigkeit von dem genutzten Compiler kann es für den Datentyp long auch zu folgender Ausgabe kommen: long: 8 Byte, von bis unsigned long: 8 Byte, von 0 bis Datentypen für Fließkommazahlen Es folgt ein Programm mit den Datentypen für Fließkommazahlen: #include <iostream> #include <iomanip> #include <cfloat> using namespace std; int main() cout << "float: " << sizeof(float) << " Byte, "; cout << "von " << FLT_MIN << " bis " << FLT_MAX << endl; cout << "double: " << sizeof(double) << " Byte, "; cout << "von " << DBL_MIN << " bis " << DBL_MAX << endl; cout << "long double: " << sizeof(long double) << " Byte, "; cout << "von " << LDBL_MIN << " bis " << LDBL_MAX << endl; cout << fixed << setprecision(30); cout << "1/7 in float: " << 1.0f / 7 << endl; Listing 2.7 Datei»datentyp_fliesskomma.cpp«Sie sehen die Angaben für die Datentypen float, double und long double. Die Konstanten für die Grenzen der Wertebereiche werden mithilfe des Headers cfloat zur Verfügung gestellt. Bei der Ausgabe und bei der Eingabe sehr großer oder sehr kleiner Zahlenwerte empfiehlt sich die Exponentialschreibweise, also mit kleinen e oder auch großem E. Sie sehen sie bei der Ausgabe der Grenzen der Wertebereiche. Zwei weitere Beispiele: 5.2e3 = 5.2 * 10 3 =5.2*1000= e-3 = 5.2 * 10-3 =5.2*0.001= Anhand der Division von 1 durch 7 wird die unterschiedliche Genauigkeit verdeutlicht. Das mathematisch genaue Ergebnis enthält unendlich oft die Zahlenfolge Beim Datentyp float wird ab der 9. Stelle nach dem Komma davon abgewichen, beim Datentyp double ab der 17. Stelle, beim Datentyp long double ab der 21. Stelle. Die Fließkommazahl 1.0 stellt einen double-wert dar, die Fließkommazahl 1.0f einen float-wert und die Fließkommazahl 1.0L einen long double- Wert. Die Zahl 1 würde einen int-wert darstellen. Die Angaben für den Speicherbedarf und den Wertebereich unterscheiden sich auch hier in Abhängigkeit von dem genutzten Compiler. Besonders beim Datentyp long double, seinem Literal L und seinen Konstanten für den Wertebereich zeigen sich Unterschiede bei den Compilern. Mit Dev C++ unter einem 64-Bit-Windows ergibt sich die folgende Ausgabe: float: 4 Byte, von e-038 bis e+038 double: 8 Byte, von e-308 bis e+308 long double: 16 Byte, von e-4932 bis e /7 in float: /7 in double: /7 in long double: float, double, long double Exponentialschreibweise Genauigkeit Speicherbedarf, Wertebereich 36 37

13 2 Arbeiten mit Zahlen und Operatoren 2.9 Konstanten in Enumerationen zusammenfassen 2.8 Feste Werte in Konstanten speichern 2.9 Konstanten in Enumerationen zusammenfassen Unveränderlich Wie bereits in Abschnitt 2.7.1,»Ganzzahlige Datentypen«, erwähnt, dienen Konstanten zur Speicherung von unveränderlichen Werten. Sie werden Innerhalb einer Enumeration können Sie mehrere ganzzahlige Konstanten, die thematisch zusammengehören, zusammenfassen. Eine Enumeration Ganzzahliger Datentyp 2 unter anderem deshalb genutzt, weil man sich ihren Namen besser merken entspricht einem vereinfachten ganzzahligen Datentyp, der nur einige kann als den zugehörigen Wert. Im nachfolgenden Programm werden eine ausgewählte Werte umfasst. Wie bei einzelnen Konstanten gilt: Die Namen ganze Zahl und eine Fließkommazahl jeweils in einer Konstante gespei- der Elemente einer Enumeration kann man sich leichter merken als den chert: zugehörigen Wert. #include <iostream> #include <iomanip> using namespace std; int main() const int FINGER = 5; // FINGER = 6; cout << "Finger: " << FINGER << endl; const double PI = ; double radius = 3.8; doublekreisumfang=2*pi*radius; Nachfolgend wird eine Enumeration definiert und genutzt: #include <iostream> using namespace std; int main() enum farbe SCHWARZ, GELB, BLAU=8, ORANGE ; farbe fa; fa = GELB; cout << "Farbe: " << fa << endl; fa = ORANGE; cout << "Farbe: " << fa << endl; cout << fixed << setprecision(3); cout << "Kreisumfang: " << kreisumfang << endl; Listing 2.8 Datei»konstante_const.cpp«Listing 2.9 Datei»konstante_enum.cpp«Nach dem Schlüsselwort enum folgt der Name der Enumeration, anschließend die Namen ihrer Elemente in geschweiften Klammern. Falls Sie keine eigenen Werte zuweisen, erhalten die Elemente nacheinan- enum Werte zuweisen const Eine Konstante wird durch das Schlüsselwort const gekennzeichnet, das vor oder nach der Angabe des Datentyps notiert wird. Sie muss bei ihrer Deklaration einen Wert erhalten. Der Name einer Konstanten besteht häu- der die aufsteigenden Werte 0, 1, 2 und so weiter. Nach der Zuweisung eines eigenen Werts (hier: 8) basieren die Werte der jeweils nachfolgenden Elemente auf diesem Wert. Es ergibt sich also 9, 10, 11 und so weiter. fig nur aus Großbuchstaben, damit sie besser zu erkennen ist. Die spätere Zuweisung eines Werts an eine Konstante ist nicht möglich. Im Programm wird die Variable fa des Enumerations-Datentyps farbe deklariert. Es folgt die Ausgabe des Programms: Die Ausgabe sieht wie folgt aus: Finger: 5 Kreisumfang: Farbe: 1 Farbe: 9 Die zweite Konstante wird zur Berechnung eines Kreisumfangs genutzt

14 2 Arbeiten mit Zahlen und Operatoren 2.10 Übung Eingabe, Berechnung, Ausgabe Übung 2A: Entwickeln Sie ein Programm in der Datei u_zahlen.cpp. Im Programm wird der Benutzer dazu aufgefordert, nacheinander drei Zahlen einzugeben. Die Zahlen können Nachkommastellen haben. Das Programm gibt die eingegebenen Zahlen zur Kontrolle wieder aus. Anschließend werden die Summe und der Mittelwert der drei Zahlen berechnet und auf drei Nachkommastellen gerundet ausgegeben. Zu jeder Übung dieses Buchs finden Sie eine mögliche Lösung in Anhang B. Schritt für Schritt Gehen Sie bei der Entwicklung in den nachfolgend beschriebenen Schritten vor. Testen Sie Ihr Programm nach jedem Schritt. Sollte sich ein Fehler bei der Übersetzung und Ausführung ergeben, verbessern Sie ihn sofort, bevor Sie mit dem nächsten Schritt beginnen. Auf diese Weise wissen Sie genau, bei welcher Änderung sich der Fehler ergeben hat und an welcher Stelle des Programms er liegt. Vergessen Sie nicht, die Variablen zu deklarieren, die beim jeweiligen Schritt benötigt werden. Die einzelnen Schritte: 왘 Lassen Sie den Benutzer die erste Zahl eingeben. Geben Sie die Zahl zur Kontrolle wieder aus. 왘 Lassen Sie den Benutzer die zweite und die dritte Zahl eingeben. Geben Sie alle drei Zahlen zur Kontrolle wieder aus. 왘 Berechnen Sie die Summe, und geben Sie diese ohne Rundung aus. 왘 Berechnen Sie den Mittelwert, und geben Sie ihn aus. 왘 Ändern Sie die Ausgaben, diesmal mit Rundung. Ein Aufruf des fertigen Programms könnte wie folgt aussehen: Erste Zahl eingeben: 3.2 Ihre erste Zahl: 3.2 Zweite Zahl eingeben: 5 Ihre zweite Zahl: 5 Dritte Zahl eingeben: 4.9 Ihre dritte Zahl: 4.9 Summe: Mittelwert:

15 Kapitel 11 Vererbung und Polymorphie Wenden Sie den Mechanismus der Vererbung an, um bereits vorhandene Eigenschaften und Methoden einfach zu übernehmen. Eine Klasse kann ihre Elemente an eine andere Klasse vererben. Diese Klasse kann wiederum ihre Elemente an eine weitere Klasse vererben und so weiter. Durch diese aufeinanderfolgenden Vererbungsvorgänge erzeugen Sie nach und nach eine Hierarchie von miteinander verwandten Klassen, welche die Darstellung von Objekten mit teils übereinstimmenden, teils unterschiedlichen Merkmalen ermöglichen. Verwandte Klassen Basisklasse und abgeleitete Klassen Eine Klasse, die Elemente einer anderen Klasse durch Vererben übernimmt, nennt man eine spezialisierte Klasse oder auch abgeleitete Klasse. Die Klasse, von der geerbt wurde, nennt man eine allgemeine Klasse oder auch Basisklasse. Allgemein/ spezialisiert Im nachfolgenden Beispiel werden mehrere Klassen zur Speicherung und Bearbeitung der Daten von grafischen Figuren definiert, die sich innerhalb einer Zeichnung befinden. Es gibt die Basisklasse figur und die beiden von ihr abgeleiteten Klassen rechteck und kreis. Grafische Figuren Zunächst folgt der Beginn der Datei mit der Definition der Basisklasse figur und der Definition ihrer Methoden: Basisklasse #include <iostream> #include <string> #include <cmath> using namespace std; class figur 223

16 11 Vererbung und Polymorphie 11.1 Basisklasse und abgeleitete Klassen ; private: double x,y; string farbe; public: void wertezuweisen(const double&, const double&, const string&); void verschieben(const double &, const double&); void faerben(const string&); void ausgeben(); können verschiedene Klassen für unterschiedliche geformte grafische Figuren abgeleitet werden, wie zum Beispiel Rechtecke oder Kreise. Die Klasse figur umfasst vier Methoden: die Methode wertezuweisen(): zur Zuweisung von Werten für die drei Eigenschaften die Methode verschieben(): zur Verschiebung um bestimmte Werte (xdelta und ydelta) in x- und y-richtung auf der Zeichnung. Dabei werden die Werte ihrer Koordinaten x und y verändert. die Methode faerben(): zur Änderung des string-werts der Eigenschaft Vier Methoden void figur::wertezuweisen(const double &xpos, const double &ypos, const string &f) x = xpos; y = ypos; farbe = f; void figur::verschieben(const double &xdelta, const double &ydelta) x += xdelta; y += ydelta; void figur::faerben(const string &f) farbe = f; farbe die Methode ausgeben(): zur Ausgabe der Werte der drei Eigenschaften auf dem Bildschirm Es folgt die Definition der Klasse rechteck, die von der Basisklasse figur abgeleitet wird, sowie die Definition ihrer Methoden: class rechteck:public figur private: double hoehe, breite; public: void wertezuweisen(const double&, const double&, const string&, const double&, const double&); void skalieren(const double&, const double&); double flaeche(); void ausgeben(); ; Erste abgeleitete Klasse 11 Drei Eigenschaften void figur::ausgeben() cout << "Figur: " << x << " / " << y << " " << farbe; Listing 11.1 Datei»ableitung.cpp«, Teil 1 von 5 Eine allgemeine grafische Figur ist durch ihren Ort innerhalb der Zeich- void rechteck::wertezuweisen( const double &xpos, const double &ypos, const string &f, const double &h, double const &b) figur::wertezuweisen(xpos, ypos, f); hoehe = h; breite = b; nung gekennzeichnet, also ihre beiden double-werte für die Koordinaten x und y entlang der entsprechenden Achsen. Zudem ist sie durch den string- Wert farbe für ihre Farbe gekennzeichnet. Von dieser Basisklasse figur void rechteck::skalieren( const double &hoehefaktor, const double &breitefaktor)

17 11 Vererbung und Polymorphie 11.1 Basisklasse und abgeleitete Klassen hoehe *= hoehefaktor; breite *= breitefaktor; die Methode skalieren(): zur Änderung der Größe des Rechtecks um bestimmte Werte (hoehefaktor und breitefaktor) die Methode flaeche(): zur Berechnung und Rückgabe der Fläche des double rechteck::flaeche() return hoehe * breite; Rechtecks die Methode ausgeben(): zur Ausgabe der Werte der insgesamt fünf Eigenschaften auf dem Bildschirm. Auch hier wird mithilfe des Scope- Operators die Methode ausgeben() der Basisklasse aufgerufen. Damit wird für die Ausgabe der Werte der geerbten Eigenschaften gesorgt. Erbt von public Zwei weitere Eigenschaften void rechteck::ausgeben() figur::ausgeben(); cout << " Rechteck: " << hoehe << " / " << breite << endl; Listing 11.2 Datei»ableitung.cpp«, Teil 2 von 5 Nach dem Namen der Klasse rechteck folgt ein Doppelpunkt, das Schlüsselwort public und anschließend der Name der Klasse figur, von der die Klasse rechteck abgeleitet wird. Durch das Schlüsselwort public wird gekennzeichnet, dass die Vererbung vollständig und uneingeschränkt ist. Es gibt hier noch Varianten, die aber nicht Thema dieses Einsteigerbuchs sind. Ein Rechteck innerhalb einer Zeichnung ist durch seinen Ort, seine Größe und seine Farbe gekennzeichnet. Die Eigenschaften x und y für den Ort und farbe für die Farbe werden geerbt, die Eigenschaften hoehe und breite ste- An dieser Stelle sehen Sie den Vorgang des Überschreibens: Die beiden Methoden wertezuweisen() und ausgeben() der Basisklasse figur werden jeweils durch gleichnamige Methoden der Klasse rechteck überschrieben. Es folgt die Definition der Klasse kreis, die ebenfalls von der Basisklasse figur abgeleitet wird, sowie die Definition ihrer Methoden: class kreis:public figur private: double radius; public: void wertezuweisen(const double&, const double&, const string&, const double&); void skalieren(const double&); double flaeche(); void ausgeben(); ; Überschreiben Zweite abgeleitete Klasse 11 Nur indirekter Zugriff Vier weitere Methoden hen für seine Größe in x- und y-richtung. Allerdings haben Sie gemäß dem Prinzip der Datenkapselung innerhalb der Klasse rechteck keinen direkten Zugriff auf die geerbten Eigenschaften aus dem private-bereich der Klasse figur, nur indirekt über die öffentlich zugänglichen Methoden aus dem public-bereich der Klasse figur. Die Klasse rechteck umfasst zusätzlich zu den vier geerbten Methoden vier eigene Methoden: die Methode wertezuweisen(): zur Zuweisung von Werten für die insgesamt fünf Eigenschaften. Unter anderem wird darin mithilfe des Scope- Operators die Methode wertezuweisen() der Basisklasse aufgerufen, um die Werte der ersten drei Parameter an die geerbten Eigenschaften wei- void kreis::wertezuweisen(const double &xpos, const double &ypos, const string &f, const double &r) figur::wertezuweisen(xpos, ypos, f); radius = r; void kreis::skalieren(const double &radiusfaktor) radius *= radiusfaktor; terzureichen. double kreis::flaeche()

18 11 Vererbung und Polymorphie 11.1 Basisklasse und abgeleitete Klassen return 4 * atan(1.0) * radius * radius; Nach der Erzeugung des Rechtecks ra werden ihm Werte zugewiesen. Es er- rechteck-objekt folgt die erste Ausgabe. Nach dem Skalieren, Verschieben und Färben des Rechtecks erfolgt die zweite Ausgabe. void kreis::ausgeben() figur::ausgeben(); cout << " Kreis: " << radius << endl; Die Methoden werden zunächst in der Klasse des Objekts gesucht, also in der Klasse rechteck. Falls sie dort nicht gefunden werden, werden sie in der Klasse gesucht, von der die Klasse des Objekts abgeleitet wurde, also in der Klasse figur. Methode suchen Listing 11.3 Datei»ableitung.cpp«, Teil 3 von 5 Die Ausgabe dieses Teils des Hauptprogramms: Eine weitere Eigenschaft Ein Kreis innerhalb einer Zeichnung ist ebenso durch seinen Ort, seine Größe und seine Farbe gekennzeichnet. Die Eigenschaften x und y für den Ort Figur: 7.4 / 2.3 Blau Rechteck: 4 / 2.6 Figur: 10.2 / 6.5 Schwarz Rechteck: 2 / 7.8 Rechteck, Flaeche: 15.6 Vier weitere Methoden und farbe für die Farbe werden geerbt, die Eigenschaft radius steht für seine Größe. Die Klasse kreis umfasst zusätzlich zu den vier geerbten Methoden ebenso vier eigene Methoden. Sie besitzen dieselben Aufgaben und einen ähnlichen Aufbau wie die gleichnamigen Methoden der Klasse rechteck. Aufgrund der unterschiedlichen Geometrie ergeben sich natürlich einige Abweichungen, zum Beispiel bei der Berechnung der Fläche. Es folgt der zweite Teil des Hauptprogramms. Darin wird ein Kreis erzeugt, verändert und ausgegeben: // Kreis kreis ka; ka.wertezuweisen(4.6, 1.7, "Blau", 2.3); ka.ausgeben(); Hauptprogramm, Teil 2 11 Hauptprogramm, Teil 1 Es folgt der erste Teil des Hauptprogramms. Darin wird ein Rechteck erzeugt, verändert und ausgegeben: int main() // Rechteck rechteck ra; ra.wertezuweisen(7.4, 2.3, "Blau", 4.0, 2.6); ra.ausgeben(); ka.skalieren(2.0); ka.verschieben(3.3, 2.4); ka.faerben("weiss"); ka.ausgeben(); cout << "Kreis, Flaeche: " << ka.flaeche() << endl; Listing 11.5 Datei»ableitung.cpp«, Teil 5 von 5 ra.skalieren(0.5, 3.0); ra.verschieben(2.8, 4.2); ra.faerben("schwarz"); ra.ausgeben(); Nach der Erzeugung des Kreises ka werden auch ihm Werte zugewiesen. Es erfolgt die erste Ausgabe. Nach dem Skalieren, Verschieben und Färben des Rechtecks erfolgt ebenso die zweite Ausgabe. Die Ausgabe dieses Teils des Hauptprogramms: kreis-objekt cout << "Rechteck, Flaeche: " << ra.flaeche() << endl << endl; Listing 11.4 Datei»ableitung.cpp«, Teil 4 von 5 Figur: 4.6 / 1.7 Blau Kreis: 2.3 Figur: 7.9 / 4.1 Weiss Kreis: 4.6 Kreis, Flaeche:

19 11 Vererbung und Polymorphie 11.3 Konstruktoren in abgeleiteten Klassen Kapselung protected 11.2 Welche Elemente sind an welcher Stelle erreichbar? Gemäß dem Prinzip der Datenkapselung haben Sie innerhalb der Klasse rechteck keinen direkten Zugriff auf die geerbten Eigenschaften aus dem private-bereich der Klasse figur, nur indirekt über die öffentlich zugänglichen Methoden aus dem public-bereich der Klasse figur. Zwischen den Bereichen private und public kann es noch den Bereich pro- void ausgebenfarbe(); ;... void rechteck::ausgebenfarbe() cout << "Farbe: " << farbe << endl; tected geben. Elemente einer Klasse aus diesem Bereich sind nur innerhalb derselben Klasse oder innerhalb der von ihr abgeleiteten Klassen erreich- Listing 11.7 Datei»zugriffsbereich.cpp«, zweiter Ausschnitt bar. Sie sind nicht von außen, also etwa von einer nicht verwandten Klasse Es wird eine zusätzliche Methode ausgebenfarbe() definiert. Darin wird Weitere Methode aus oder vom Hauptprogramm aus, erreichbar. direkt auf die Eigenschaft farbe der Basisklasse zugegriffen. Die Definitio- Basisklasse Dies wird an einer Variante des Programms aus Abschnitt 11.1,»Basisklasse nen der restlichen Methoden ändern sich nicht. und abgeleitete Klassen«, gezeigt. Zunächst die geänderte Definition der Basisklasse: class figur private: double x,y; protected: string farbe; public: void wertezuweisen(const double&, const double&, const string&); void ausgeben(); ; Es folgt das Hauptprogramm: int main() rechteck ra; ra.wertezuweisen(7.4, 2.3, "Blau", 4.0, 2.6); ra.ausgeben(); ra.ausgebenfarbe(); // cout << ra.farbe << endl; Listing 11.8 Datei»zugriffsbereich.cpp«, dritter Ausschnitt Die Ausgabe des Programms sieht wie folgt aus: 11 Listing 11.6 Datei»zugriffsbereich.cpp«, erster Ausschnitt Figur: 7.4 / 2.3 Blau Rechteck: 4 / 2.6 Farbe: Blau Eigenschaft verschieben Die Eigenschaft farbe der Basisklasse wird aus dem Bereich private in den Bereich protected verschoben. Die Definitionen der Methoden ändern sich nicht. Es folgt die Definition der abgeleiteten Klasse: Die Eigenschaft farbe kann direkt von der abgeleiteten Klasse aus erreicht werden. Der Zugriff aus dem Hauptprogramm würde nach wie vor zu einem Fehler führen. Anderer Zugriff class rechteck:public figur private: double hoehe, breite; public: void wertezuweisen(const double&, const double&, const string&, const double&, const double&); void ausgeben(); 11.3 Konstruktoren in abgeleiteten Klassen Sie können im Zusammenhang mit der Vererbung auch Konstruktoren und Destruktoren verwenden. Besonders bei den Konstruktoren müssen Sie darauf achten, dass sie aufeinander abgestimmt sind. Passende Konstruktoren

20 11 Vererbung und Polymorphie 11.3 Konstruktoren in abgeleiteten Klassen Reihenfolge Ein Objekt einer abgeleiteten Klasse wird konstruiert, indem als Erstes der Konstruktor der Basisklasse durchlaufen wird. Anschließend wird der Konstruktor der abgeleiteten Klasse durchlaufen. Zum Ende der Existenz eines Objekts verläuft es umgekehrt: Zunächst wird der Destruktor der abgeleiteten Klasse durchlaufen, anschließend der Destruktor der Basisklasse. void figur::ausgeben() cout<<"figur:"<<x<<"/"<<y<<""<<farbe; Basisklasse Das wird anhand der beiden Klassen figur und rechteck verdeutlicht. Statt der Methode wertezuweisen() werden Konstruktoren verwendet. Zudem gibt es jeweils einen Destruktor. Es folgt der Beginn der Datei mit der Definition der Klasse figur und ihrer figur::~figur() cout << "figur-destruktor" << endl << endl; Methoden: Listing 11.9 Datei»konstruktor_ableitung.cpp«, Teil 1 von 3 #include <iostream> #include <string> using namespace std; Es gibt einen Konstruktor ohne Parameter und einen Konstruktor mit drei Parametern für die drei Eigenschaften der Klasse figur. Außerdem gibt es einen Destruktor. Zur Verdeutlichung der Reihenfolge geben alle Metho- Zwei Konstruktoren 11 class figur private: double x,y; string farbe; public: figur(); figur(const double&, const double&, const string&); void ausgeben(); ~figur(); ; figur::figur() cout << "figur-konstruktor ohne Parameter" << endl; figur::figur(const double &xpos, const double &ypos, const string &f) cout << "figur-konstruktor mit Parametern" << endl; x = xpos; y = ypos; farbe = f; den eine kurze Information aus, dass sie durchlaufen werden. Manche Compiler geben eine Warnung aus, falls eine Eigenschaft, wie im vorliegenden Fall, nicht im Konstruktor initialisiert wird. Das soll normalerweise nicht vorkommen. Hier dient der Konstruktor aber nur zu Ihrer Information über die Reihenfolge des Ablaufs. Es folgt die Definition der Klasse rechteck und ihrer Methoden: class rechteck:public figur private: double hoehe, breite; public: rechteck(); rechteck(const double&, const double&, const string&, const double&, const double&); void ausgeben(); ~rechteck(); ; rechteck::rechteck() cout << "rechteck-konstruktor ohne Parameter" << endl; Abgeleitete Klasse

21 11 Vererbung und Polymorphie 11.4 Was bedeutet Polymorphie? rechteck::rechteck( const double &xpos, const double &ypos, const string &f, const double &h, const double &b):figur(xpos, ypos, f) cout << "rechteck-konstruktor mit Parametern" << endl; hoehe = h; breite = b; void rechteck::ausgeben() figur::ausgeben(); cout << " Rechteck: " << hoehe << " / " << breite << endl; rechteck::~rechteck() cout << "rechteck-destruktor" << endl; Listing Datei»konstruktor_ableitung.cpp«, Teil 2 von 3 cout << endl; rechteck rb; cout << endl; Listing Datei»konstruktor_ableitung.cpp«, Teil 3 von 3 Es wird ein Objekt der Klasse rechteck mit Werten und eines ohne Werte erzeugt. Anhand der nachfolgenden Ausgabe sehen Sie die Reihenfolge des Ablaufs bei der Erzeugung der Objekte und beim Ende der Existenz der Objekte. figur-konstruktor mit Parametern rechteck-konstruktor mit Parametern Figur: 7.4 / 2.3 Blau Rechteck: 4 / 2.6 figur-konstruktor ohne Parameter rechteck-konstruktor ohne Parameter rechteck-destruktor figur-destruktor Reihenfolge 11 Für alle Eigenschaften Parameter weitergeben Konstruktor ruft Konstruktor auf Es gibt einen Konstruktor ohne Parameter und einen Konstruktor mit allen fünf Parametern für die fünf Eigenschaften der Klasse rechteck. Außerdem gibt es einen Destruktor. Der Konstruktor mit Parametern ruft den Konstruktor der Basisklasse figur ähnlich wie eine Methode auf. Das wird erreicht, indem nach der Liste der Parameter im Kopf der Methode ein Doppelpunkt folgt, anschließend der Name der Basisklasse figur, gefolgt von den drei Parametern, die weitergegeben werden. Es muss ein passender Konstruktor der Basisklasse zur Verfügung stehen. Wie Sie an der Ausgabe weiter unten sehen, ruft auch der parameterlose Konstruktor den parameterlosen Konstruktor der Basisklasse auf. Auch dieser muss zur Verfügung stehen. rechteck-destruktor figur-destruktor Hinweis Das Objekt einer abgeleiteten Klasse wird erbaut wie ein Haus: zunächst das Erdgeschoss (die Basisklasse), anschließend weitere Etagen (die abgeleiteten Klassen). Zum Ende der Existenz wird das Objekt nacheinander von der obersten Etage bis zum Erdgeschoss abgebaut Was bedeutet Polymorphie? Es folgt das Hauptprogramm: int main() rechteck ra(7.4, 2.3, "Blau", 4.0, 2.6); ra.ausgeben(); Polymorphie bedeutet Vielgestaltigkeit. Innerhalb der objektorientierten Programmierung bedeutet dieser Begriff, dass einem Objekt abhängig von seiner Nutzung unterschiedliche Klassen zugeordnet werden können. Ein Objekt der Klasse rechteck ist auch ein Objekt der Klasse figur. Dadurch kann auf die jeweils zugehörigen Objektelemente zugegriffen werden. Das Vielgestaltig

22 11 Vererbung und Polymorphie 11.4 Was bedeutet Polymorphie? vergrößert die Flexibilität bei der Programmierung mit Objekten verwand- Manche Compiler geben eine Warnung aus, dass die Klasse eine virtuelle ter Klassen. Methode ausgeben() besitzt, aber keinen virtuellen Destruktor. Das hat kei- Feld von Zeigern Im nachfolgenden Beispiel werden zunächst einige Objekte der miteinan- ne Auswirkung auf den Ablauf. Gemeinsamer Zugriff Basisklasse der verwandten Klassen figur, rechteck und kreis erzeugt. Anschließend wird ein vector-feld von einfachen Zeigern auf Objekte der gemeinsamen Basisklasse figur erstellt. Die Adressen der soeben erstellten Objekte werden den Elementen des Zeigerfelds zugewiesen. Auf diese Weise sind alle miteinander verwandten Objekte gemeinsam erreichbar. Innerhalb einer Schleife werden sie gemeinsam verschoben und ausgegeben. Zudem wird die Gesamtfläche aller Objekte ermittelt. Zunächst die Basisklasse figur. Es werden nur die Teile des Programms erläutert, die für die Thematik wichtig sind: Die beiden abgeleiteten Klassen rechteck und kreis bleiben mit Ausnahme eines Zeilenumbruchs unverändert. Es folgt das Hauptprogramm: int main() figur fa(2.9, 1.2, "Schwarz"); rechteck ra(7.4, 2.3, "Blau", 4.0, 2.6); kreis ka(4.6, 1.7, "Rot", 2.3); kreis kb(3.8, 0.5, "Gelb", 3.5); Hauptprogramm class figur private: double x,y; string farbe; public: figur(const double&, const double&, const string&); void verschieben(const double&, const double&); void faerben(const string&); virtual double flaeche()return 0.0;; virtual void ausgeben(); ; Listing Datei»polymorphie.cpp«, erster Ausschnitt vector<figur *> figurzeigerfeld; figurzeigerfeld.push_back(&fa); figurzeigerfeld.push_back(&ra); figurzeigerfeld.push_back(&ka); figurzeigerfeld.push_back(&kb); double summeflaeche = 0; for(figur *fz:figurzeigerfeld) (*fz).verschieben(1.0, 1.0); (*fz).ausgeben(); summeflaeche += (*fz).flaeche(); cout << "Summe: " << summeflaeche << endl; 11 Fläche einer Figur Objekte der Basisklasse figur haben keine Fläche. Dennoch wird für den ge- meinsamen Zugriff eine Methode mit dem Namen flaeche() benötigt. Sie muss zum Erstellen einer korrekten Definition einen double-wert zurück- Listing Datei»polymorphie.cpp«, zweiter Ausschnitt liefern wie die gleichnamigen bereits vorhandenen Methoden der beiden abgeleiteten Klassen rechteck und kreis. Zunächst werden die vier Objekte fa, ra, ka und kb der Klassen figur, rechteck beziehungsweise kreis erzeugt. Vier Objekte Virtuelle Methode Die Methode flaeche() dient in der Basisklasse allerdings nur als Umleitung, damit die Methode der Klasse des Objekts gefunden wird, auf die der Zeiger zeigt. Das wird erreicht, indem sie mithilfe des Schlüsselworts virtual als virtuelle Methode gekennzeichnet wird. Aus demselben Grund wird die bereits vorhandene Methode ausgeben() als virtuelle Methode gekennzeichnet. Anschließend wird das Feld figurzeigerfeld erstellt. Es handelt sich um ein vector-feld von einfachen Zeigern auf Objekte der gemeinsamen Basisklasse figur. Mithilfe der Methode push_back() erhält das Feld einzelne Elemente. Jedes der Elemente beinhaltet die Adresse eines der zuvor erzeugten Objekte. Drei der vier Zeiger vom Typ Einfacher Zeiger auf Objekt der Basisklasse zeigen auf Objekte von abgeleiteten Klassen. Zeiger auf Objekte

23 11 Vererbung und Polymorphie 11.5 Erben von mehreren Klassen Methode suchen Alle Methoden, die innerhalb der bereichsbasierten for-schleife für diese Bei solchen Mehrfachvererbungen muss man allerdings darauf achten, dass Mehrfachvererbung Zeiger aufgerufen werden, werden zunächst in der Basisklasse gesucht. Ent- manche Begriffe auf unterschiedliche Art zu deuten sind. Sollte es in bei- weder sind sie dort vorhanden, wie die Methode verschieben(), oder es den Klassen flugzeug und schiff die Eigenschaft geschwindigkeit geben, so existiert eine Umleitung zu der jeweils gleichnamigen Methode der tat- kann es sich dabei für ein Objekt der Klasse wasserfahrzeug um die Ge- sächlichen Klasse des Objekts, wie bei den Methoden flaeche() und ausge- schwindigkeit des fliegenden Objekts in der Luft oder um die Geschwindig- ben(). keit des schwimmenden Objekts auf dem Wasser handeln. Objekt der abgeleiteten Klasse Objekt der Basisklasse Sowohl als auch Dieser theoretische Zusammenhang wird an zwei Beispielen erläutert: Der zweite einfache Zeiger zeigt auf das Objekt ra der abgeleiteten Klasse rechteck. Die Methode verschieben() wird unmittelbar in der Klasse figur gefunden und genutzt. Die beiden Methoden ausgeben() und flaeche() sind innerhalb der Basisklasse virtuell. Daher wird zu den gleichnamigen Methoden der tatsächlichen Klasse des Objekts umgeleitet, und das ist die Klasse rechteck. Der erste einfache Zeiger zeigt auf das Objekt fa der Basisklasse figur. Auch hier wird für die beiden Methoden ausgeben() und flaeche() zur tatsächlichen Klasse des Objekts umgeleitet, und das ist wiederum die Klasse figur. Es folgt die Ausgabe des Programms: Figur: 3.9 / 2.2 Schwarz Figur: 8.4 / 3.3 Blau Rechteck: 4 / 2.6 Figur: 5.6 / 2.7 Rot Kreis: 2.3 Figur: 4.8 / 1.5 Gelb Kreis: 3.5 Summe: Erben von mehreren Klassen In C++ können Klassen ihre Eigenschaften und Methoden auch gleichzeitig von mehreren Klassen erben. So kann es zum Beispiel die Klassen flugzeug und schiff geben, die jeweils Im nachfolgenden Beispiel gibt es neben den beiden bekannten Klassen figur und rechteck die Klasse textzeile. Eine Textzeile, also ein Objekt dieser Klasse, hat einen textlichen Inhalt, der in einer bestimmten Schriftart, Schriftfarbe und Schriftgröße erscheint. Es kommt eine weitere Klasse rechtecktextzeile hinzu. Eine Rechteck-Textzeile, also ein Objekt dieser Klasse, ist ein Rechteck mit einer Textzeile. Zunächst die Definition der Klasse textzeile und ihrer Methoden: class textzeile private: string inhalt; string art; string farbe; double groesse; public: textzeile(const string&, const string&, const string &, const double&); void ausgeben(); ; textzeile::textzeile(const string &i, const string &a, const string &f, const double &g) inhalt = i; art=a; farbe = f; groesse = g; Rechteck mit Textzeile Klasse»textzeile«11 Elemente für ihre fliegenden beziehungsweise schwimmenden Objekte bieten. Die Klasse wasserflugzeug erbt von beiden Klassen, da ein Wasserflugzeug sowohl fliegen als auch schwimmen kann. void textzeile::ausgeben()

24 11 Vererbung und Polymorphie 11.5 Erben von mehreren Klassen cout << "Textzeile: " << inhalt << " " << art << " " << farbe << " " << groesse << endl; textzeile::ausgeben(); cout << "Rechteck-Textzeile: " << ausrichtung << endl; Listing Datei»mehrfachvererbung.cpp«, erster Ausschnitt Listing Datei»mehrfachvererbung.cpp«, zweiter Ausschnitt Klasse»rechteck- Textzeile«Die Klasse umfasst vier Eigenschaften, einen Konstruktor mit vier Parametern und eine Methode zur Ausgabe. Es folgt die Definition der Klasse rechtecktextzeile und ihrer Methoden. Sie erbt von zwei Klassen. Besonders beim Aufbau des Konstruktors muss man den Überblick bewahren: class rechtecktextzeile:public rechteck, public textzeile private: string ausrichtung; public: rechtecktextzeile( const double&, const double&, const string&, const double&, const double&, const string&, const string&, const string&, const double&, const string&); void ausgeben(); ; Nach dem Namen der Klasse folgen ein Doppelpunkt und anschließend die beiden Klassen, von denen diese Klasse erbt. Sie werden durch ein Komma voneinander getrennt. Die Klasse umfasst insgesamt zehn Eigenschaften. Fünf Eigenschaften erbt sie von der Klasse rechteck, vier Eigenschaften stammen von der Klasse textzeile, und die eigene Eigenschaft ausrichtung kommt hinzu. Mit der letztgenannten Eigenschaft wird die Ausrichtung der Textzeile innerhalb des Rechtecks bezeichnet. Der Konstruktor erwartet alle zehn Parameter. Er gibt fünf Parameter an die Klasse rechteck weiter. Nach einem Komma folgt die Weitergabe von vier Parametern an die Klasse textzeile. Beachten Sie die unterschiedlichen Namen der Parameter fr und ft für die beiden Farben. Innerhalb der Konstruktormethode wird nur noch der Wert für die eigene Eigenschaft ausrichtung zugewiesen. Die Ausgabemethode ruft zunächst nacheinander die beiden gleichnamigen Methoden der Klassen auf, von denen geerbt wird. Erbt von zwei Klassen Zehn Eigenschaften Weitergabe der Parameter 11 rechtecktextzeile::rechtecktextzeile( const double &xpos, const double &ypos, const string &fr, const double &h, const double &b, const string &tx, const string &art, const string &ft, const double &groesse, const string &aus): rechteck(xpos, ypos, fr, h, b), textzeile(tx, art, ft, groesse) ausrichtung = aus; Es folgt das Hauptprogramm: int main() textzeile ta("guten Morgen", "Tahoma", "Schwarz", 12); ta.ausgeben(); cout << endl; rechtecktextzeile rta( 5.2, 1.8, "Blau", 1.2, 3.5, "Hallo Welt", "Arial", "Rot", 8.5, "Zentriert"); rta.ausgeben(); Hauptprogramm void rechtecktextzeile::ausgeben() rechteck::ausgeben(); Listing Datei»mehrfachvererbung.cpp«, dritter Ausschnitt

25 11 Vererbung und Polymorphie Es wird zunächst ein Objekt der Klasse textzeile erstellt. Es folgt die Erzeugung eines Objekts der Klasse rechtecktextzeile. Zur besseren Zuordnung habe ich die Parameter des Konstruktors auf mehrere Zeilen verteilt. Die Ausgabe sieht wie folgt aus: Textzeile: Guten Morgen Tahoma Schwarz 12 Figur: 5.2 / 1.8 Blau Rechteck: 1.2 / 3.5 Textzeile: Hallo Welt Arial Rot 8.5 Rechteck-Textzeile: Zentriert Hinweis Das Problem der Mehrdeutigkeit wurde bereits erwähnt. Wie ist die Zuordnung zu sehen? Ist eine Rechteck-Textzeile ein Rechteck und eine Textzeile, oder handelt es sich um ein Rechteck, das eine Textzeile beinhaltet? Der Aufbau der objektorientierten Struktur könnte auf unterschiedliche Art vorgenommen werden. 242

26 Auf einen Blick Auf einen Blick 1 Eine erste Einführung Arbeiten mit Zahlen und Operatoren Mehrere Zweige in einem Programm Teile von Programmen wiederholen Programme aufteilen in Funktionen Große Datenmengen speichern in Feldern Arbeiten mit Zeichen und Texten Daten in Strukturen zusammenfassen Vorhandene Funktionen nutzen Eigene Klassen entwerfen Vererbung und Polymorphie Datenströme verarbeiten Container sind vielfältige Datenstrukturen Mehr zu eigenen Klassen Präprozessor-Anweisungen Grafische Benutzeroberflächen mit der Qt-Bibliothek Datenbanken mit SQLite verwalten

27 Inhalt Inhalt 1 Eine erste Einführung Was machen wir mit C++? Was benötige ich zum Programmieren? Die Entwicklung von C So sieht das erste Programm aus Kommentieren Sie Ihre Programme Arbeiten mit Zahlen und Operatoren Wie speichere ich Zahlen? Rechnen mit Operatoren Fehler suchen Wie können Daten eingegeben werden? Zahlen formatieren mit Manipulatoren Zuweisungen kürzer schreiben Mehr über die Speicherung von Zahlen Ganzzahlige Datentypen... Datentypen für Fließkommazahlen Feste Werte in Konstanten speichern Konstanten in Enumerationen zusammenfassen Übung Mehrere Zweige in einem Programm Zwei Zweige mit»if«und»else« Bedingungen benötigen Vergleiche

28 Inhalt Inhalt 3.3 Mehr als zwei Zweige Wie kann ich Bedingungen kombinieren? Zweige zusammenfassen mit»switch«und»case« Was ist mit dem Rest? Welcher Operator hat Vorrang? Wie speichere ich Wahrheitswerte? Die Kurzform: der bedingte Ausdruck Fehler suchen Standardwerte vorgeben Beliebig viele Parameter Funktionen mehrfach definieren Funktionen, die sich selbst aufrufen Funktionen als Parameter Übung Übungen Große Datenmengen speichern in Feldern 93 4 Teile von Programmen wiederholen Regelmäßige Wiederholungen mit»for« Wiederholungen für einen Bereich Bedingte Wiederholungen mit»do-while« Besser vorher prüfen mit»while« Wiederholungen abbrechen oder fortsetzen Die Wiederholung der Wiederholung Übungen Wie werden Felder unterschieden? Einfache Felder mit fester Größe Intelligente Felder mit fester Größe Ausnahmen behandeln Einfache Zeiger Die Operatoren»new«und»delete« Ein intelligenter und eindeutiger Zeiger Weitere intelligente Zeiger Intelligente Felder mit variabler Größe Programme aufteilen in Funktionen So schreibe ich eine eigene Funktion Wie übergebe ich Daten? Ein weiterer Zugriff über eine Referenz Felder als Parameter Daten in mehreren Dimensionen speichern Ein zweidimensionales Feld mit fester Größe Ein zweidimensionales Feld mit variabler Größe Übungen Übergabe an eine Referenz Übergabe an eine konstante Referenz Wie erhalte ich ein Ergebnis zurück? Mehr Ordnung im Programm Statische Variablen behalten ihren Wert Arbeiten mit Zeichen und Texten Einzelne Zeichen Einfache Zeichenketten

29 Inhalt Inhalt 7.3 Intelligente Zeichenketten: Strings Strings erzeugen Strings ändern Strings vergleichen und durchsuchen Wie wandle ich Zahlen in Strings um? Wie verarbeite ich Eingaben? Felder von Zeichenketten Übung Daten in Strukturen zusammenfassen Wie speichere ich zusammengehörige Daten? Besser einen Typ definieren Strukturen und Felder Strukturen und Funktionen Das Hauptprogramm Die Größe des Felds festlegen Die Eingabefunktionen Die Ausgabefunktionen Verschiedene mathematische Funktionen Prüffunktionen Betrag und Vergleich Rechnen mit komplexen Zahlen Konstruktoren Spezielle Funktionen Operatoren Mathematische Funktionen Daten mit dem Betriebssystem austauschen Wie lauten die Parameter? Berechnung der Summe der Parameter Wie nutze ich die Rückgabe eines Programms? Systemkommandos ausführen Ausgabe umlenken Eingabe umlenken Zugriff auf Dateien und Verzeichnisse Attribute von Dateien und Verzeichnissen Zugriffsrechte ändern Inhalt eines Verzeichnisses Inhalt eines Verzeichnisbaums Dateien ändern Verzeichnisse ändern Eine Hierarchie von Strukturen Übung Eigene Klassen entwerfen Vorhandene Funktionen nutzen Umgang mit Datum und Uhrzeit Datum und Uhrzeit ausgeben Zeit messen Zeitangaben erzeugen und berechnen Wie erzeuge ich zufällige Zahlen? Nützliche mathematische Funktionen Winkelfunktionen Funktionen zum Runden Klassen umfassen Eigenschaften und Methoden Die Definition der Klasse Objekte als Instanzen einer Klasse Zerlegen Sie das Programm Schützen Sie die Daten Wie erzeuge und lösche ich Objekte? Objekte und Felder Statische Elemente einer Klasse Wie überlade ich Operatoren?

30 Inhalt Inhalt 10.8 Objekte ausgeben Eigenschaften können Objekte sein Übung Container sind vielfältige Datenstrukturen Wie durchlaufe ich Container? Intelligente Felder mit fester Größe Vererbung und Polymorphie Basisklasse und abgeleitete Klassen Welche Elemente sind an welcher Stelle erreichbar? Konstruktoren in abgeleiteten Klassen Was bedeutet Polymorphie? Erben von mehreren Klassen Datenströme verarbeiten Sequenzielles Schreiben und Lesen Schreiben in eine Datei Pfadangaben Lesen aus einer Datei Mehrmals öffnen und schließen Schreiben und Lesen an beliebiger Stelle Formatiertes Schreiben in eine Datei Lesen an beliebiger Stelle einer Datei Schreiben an beliebiger Stelle in eine Datei Wie leiten Sie Datenströme? String-Streams auf dem Bildschirm ausgeben String-Streams von Tastatur lesen Wie ist das CSV-Format zum Austausch aufgebaut? Im CSV-Format in eine Datei schreiben Eine Datei im CSV-Format lesen Intelligente Felder mit variabler Größe Eine Warteschlange mit zwei Enden Daten in Listen verketten Einfach verkettete Listen Doppelt verkettete Listen Zwei einfache Container Last In First Out (LIFO) First In First Out (FIFO) Zwei nützliche Typen Paare Tupel Eine Menge von Elementen Sortiert und einzigartig Sortiert und nicht einzigartig Nicht sortiert und einzigartig Nicht sortiert und nicht einzigartig Schlüssel und Werte in einer Map Sortiert und einzigartig Nicht sortiert und einzigartig Sortiert und nicht einzigartig Nicht sortiert und nicht einzigartig Algorithmen für Bereiche Mengenlehre Eine Menge von Bits Funktionen für Bitsets Operatoren für Bitsets

31 Inhalt Inhalt 14 Mehr zu eigenen Klassen Objekte initialisieren, kopieren und erzeugen Klassen können Freunde haben Befreundete Funktionen Befreundete Klassen Namen müssen eindeutig sein Fehler behandeln mit Ausnahmen Ausnahmen in Schleifen Eigene Ausnahmen werfen Ausnahme in Funktion behandeln Eigene Ausnahmeklasse definieren Innere Klassen Templates sind Vorlagen Templates für Funktionen Templates für Klassen Präprozessor-Anweisungen Einbinden von Dateien Definitionen und Makros Definitionen und Verzweigungen Eine Systemweiche Grafische Benutzeroberflächen mit der Qt-Bibliothek Qt installieren Qt für Windows Qt für Ubuntu Linux Qt für macos Das erste Qt-Projekt Ein neues Projekt anlegen Projekt und Verzeichnis benennen Kit auswählen Die Fenster der Entwicklungsumgebung Die Anwendung ausführen Projekt schließen und öffnen Die erste GUI-Anwendung Klasse und Dateien Projekt- und Codefenster »Design«-Ansicht Projekt ausführen Ein Label einfügen und gestalten Weitere Widgets einfügen und gestalten Code und Verbindung erstellen Registerkarte»Signals und Slots« Ein einfacher Kopfrechentrainer Die Erstellung der GUI Die Deklaration der Klasse Die Definition ohne Prüfung Die Definition mit Prüfung Ein erweiterter Kopfrechentrainer Ein Projekt kopieren Die Erweiterung der GUI Die Erweiterung der Deklaration Die Erweiterung des Konstruktors Die Erweiterung des Prüfvorgangs Die Erweiterung der Aufgabenstellung Weitere Widgets Beschreibung der Widgets Die Erstellung der GUI Die Deklaration der Klasse Der Konstruktor der Klasse Die Ereignismethoden der Klasse

32 Inhalt Inhalt 17 Datenbanken mit SQLite verwalten Der Aufbau einer Datenbank Wie erzeuge ich Datenbank und Tabelle? Die Erstellung der GUI Die Deklaration der Klasse Konstruktor und Destruktor der Klasse Die Ereignismethode der Klasse Wie speichere ich Daten in einer Tabelle? So zeige ich alle Daten einer Tabelle an Wie wähle ich bestimmte Daten aus? Vergleichsoperatoren Logische Operatoren Vergleichsoperator»LIKE« Der Benutzer wählt Daten aus Daten sollten sortiert werden Wie ändere ich Daten? Vorsicht beim Löschen von Daten Eine Datenbank mit mehreren Tabellen Inhalt der Datenbank Das Datenbankmodell Der Aufbau des Qt-Projekts Das Erstellen und Füllen der Tabellen Abfragen über einzelne Tabellen Abfragen über zwei verbundene Tabellen Abfragen über drei verbundene Tabellen Gruppieren und Summieren Projekt Vokabeln Die Benutzung des Programms Der Aufbau des Qt-Projekts Die Deklaration der Klasse Der Konstruktor der Klasse Das Aktivieren und Deaktivieren von Widgets Die Auswahl der Sprachkombination Der Vokabeltest wird gestartet Die Übersetzung wird geprüft Der Vokabeltest wird vorzeitig beendet Die Neueingabe von Vokabeln wird gestartet Die List Widgets werden parallel markiert Eine neue Vokabel wird gespeichert Eine Vokabel wird gelöscht Die Neueingabe von Vokabeln wird beendet Mögliche Erweiterungen des Programms Übung Benutzeroberfläche Bedienung Zugriff auf Date Edit Widget Eintrag im List Widget aufsplitten A Installationen 451 A.1 Installationen unter Windows A.1.1 Orwell Dev-C++ installieren A.1.2 Orwell Dev-C++ nutzen A.1.3 Eclipse installieren A.1.4 Eclipse nutzen A.1.5 NetBeans installieren A.1.6 NetBeans nutzen A.1.7 MinGW installieren A.1.8 MinGW im Systempfad eintragen A.1.9 MinGW nutzen A.1.10 Binden eines Programms A.2 Installationen unter Ubuntu Linux A.2.1 Arbeiten im Terminal A.2.2 Eclipse installieren A.2.3 NetBeans installieren A.3 Installationen unter macos A.3.1 Xcode A.3.2 Arbeiten im Terminal A.3.3 Eclipse installieren A.3.4 NetBeans installieren

33 Inhalt A.4 A A.4.1 A.4.2 A.4.3 A.4.4 Spezifizierer»auto«bei Funktionen... Spezifizierer»decltype«... Komponenten eines Tupels... Funktionstemplate»make_unique« Installation für C A.5.1 A MinGW mit GCC 7.1 installieren... Eine Funktion aus C B Tipps und Musterlösungen 475 B.1 Windows einige Tastenkombinationen B.2 B.3 16 Beispiele für C Unix-Befehle B.2.1 B.2.2 Inhalt eines Verzeichnisses... Verzeichnis anlegen, wechseln und löschen B.2.3 B.2.4 Datei kopieren, verschieben und löschen... Schlüsselwörter der Sprache C Lösungen der Übungen B.3.1 B.3.2 B.3.3 B.3.4 B.3.5 B.3.6 B.3.7 B.3.8 Übung zu Kapitel 2... Übungen zu Kapitel 3... Übungen zu Kapitel 4... Übung zu Kapitel 5... Übungen zu Kapitel 6... Übung zu Kapitel 7... Übung zu Kapitel 8... Übung zu Kapitel Index

34 Index Index -- (Dekrement)... 33, (Subtraktion) ^ (bitweises Exklusiv-Oder) _ (SQL) DATE FILE LINE TIME unix _WIN :: (Scope) , 197, 330? ! (Logisches Nicht)... 47!= (ungleich)... 44?: (bedingter Ausdruck) (Klasse)... 97, 198. (Struktur) (Verzeichnis) , (Verzeichnis) , (Restparameter) ' (Zeichen) " (Zeichenkette) [ ] (Feld) [ ] (Map) [ ] (Zugriffsfehler) * (Deklaration) * (Dereferenzierung) * (Multiplikation) *= (Zuweisung) / (Division) /* */ (Kommentar) // (Kommentar) /= (Zuweisung) \0 (Endezeichen) & (Adressoperator) & (bitweises Und) , 321 & (Referenz) && (Logisches Und) #define #elif #else #endif #if #ifdef #ifndef #include... 20, 349 % (Modulo)... 50, 154 % (SQL) (Addition) (Inkrement)... 33, 271, 287 += (Zuweisung)... 33, 271 < (kleiner)... 44, 411 < (Umlenkung) << (Ausgabestrom) << (Bildschirm) << (bitweise schieben) << (Datei) << (ostringstream) <<= (bitweise schieben) <= (kleiner gleich)... 44, 411 <> (ungleich, SQL) = (gleich, SQL) = (Zuweisung) == (gleich) = (Zuweisung)... 33, 271 -> (Klasse) > (Zugriff) > (größer)... 44, 411 > (Umlenkung) >= (größer gleich)... 44, 411 >> (bitweise schieben) >> (Datei) >> (istringstream) >> (Tastatur) >> (Umlenkung) >>= (bitweise schieben) (Bitweises Oder) , 258, 321 (Logisches Oder) ~ (Bitweises Nicht) ~ (Destruktor) A Ableitung abs() cmath complex

35 Index Index Absoluter Pfad , 245 Addition Adressoperator algorithm , 311 all() Anweisung lange mehrere Anweisungsblock... 42, 58, 97 any() arg() argc argv array... 96, 272 Iterator mehrdimensional Assoziativer Container at() array... 97, 273 Fehler abfangen string vector , 277 Attribut Ausgabe Ausrichtung Bildschirm Breite Datei Füllzeichen Nachkommastellen umlenken Ausgabestrom , 259 leeren Ausnahme werfen Ausnahmebehandlung in Funktion in Klasse mit Schleife auto... 60, 468, 469 B back() deque queue Basis Basisklasse Bedingter Ausdruck Bedingung Fließkommazahl verknüpfen begin() iterator string Benutzeroberfläche Bereich Algorithmen Anzahl pro Wert Differenzmenge durchlaufen finden Element prüfen rotieren Schnittmenge tauschen tauschen Element vereinigen Vereinigungsmenge Bereichsbasierte Schleife Feld Betrag komplexe Zahl Binden Bit bitset Funktion Operator Bitweise Exklusiv-Oder Oder , 258, 321 Und , 321 Verneinung Verschiebung Bogenmaß bool Boolesche Variable break C C c_str() C++ Referenz C++ (Forts.) Standard C Eclipse Linux macos MinGW NetBeans Orwell Dev-C C++14 Beispiele Eclipse Linux macos MinGW NetBeans C camelcase case Cast , 154, 158 catch cbrt() ceil() cfloat char... 35, 115, 120 chdir() chmod , 183, 185 chmod() cin getline() Clang-Compiler class clear() deque forward_list istringstream , 261 list set vector climits clock_t clock() CLOCKS_PER_SEC close() ifstream ofstream closedir() cmath Codenummer Codeseite umstellen Comma-separated Values Compiler complex conj() const... 38, 74, 76 Constraint Container assoziativ Bibliothek... 95, 269 durchlaufen continue cos() count() algorithm bitset map set cout Objekt cstdarg cstdlib , 174 cstring CSV ctime D Datei Änderungszeitpunkt Attribut ausführbar einbinden Größe lesen beliebig lesen CSV lesen sequenziell Leseposition nennen Leseposition setzen löschen öffnen mehrmals öffnen zum Lesen öffnen zum Schreiben prüfen zum Lesen prüfen zum Schreiben schließen ,

36 Index Index Datei (Forts.) schließen mehrmals schreiben beliebig schreiben CSV schreiben formatiert schreiben sequenziell Schreibposition nennen Schreibposition setzen Statusänderung umbenennen Zeilenende Zugriff Zugriff beliebig Zugriff sequenziell Zugriffsrecht , 182 Zugriffszeitpunkt Dateimodus Dateiname Datenbank 1:n-Beziehung Beziehung , 424 Join m:n-beziehung mehrere Tabellen Modell Datenbanksystem Datenfeld Datenkapselung , 230 Datensatz Datenstruktur Datentyp Definition Enumeration Fließkommazahl Funktion ganzzahlig Genauigkeit Klasse Rückgabewert Speicherbedarf Struktur umwandeln Wertebereich Datum , 352 Debug... 27, 81 Debugger decltype default define Deklaration auto Funktion in Anweisungsblock mehrere Variable Dekrement delete deque anfügen Element einfügen Element füllen Iterator leeren löschen Element , 282 Zugriff Element Dereferenzierung Destruktor Dev-C Dezimale Notation Dezimaltrennzeichen... 24, 263 Differenzmenge DIR dirent Division ganze Zahlen Rest... 50, 159 Doppelt verkettet double... 23, 37 double-ended queue do-while Download zum Buch... 17, 479 Duale Ziffer Dynamisches Feld , 105, 275 E e (eulersche Zahl) e (Exponent) echo off Eclipse Debug... 27, 81 Linux macos nutzen Windows Editor gedit Notepad TextWrangler Eigenschaft... 97, 195 schützen Standardwert statisch Einfach verkettet Einfache Zeichenkette Einfacher Zeiger Einfaches Feld... 94, 101 Eingabe Datei ganze Zeile Tastatur umlenken Eingabestrom , 260 Flaggen löschen Einrückung... 20, 42 Element elif Ellipse else Präprozessor empty() end() iterator string endif endl Entwicklungsumgebung enum Enumeration erase_after() erase() deque list map set string vector errorlevel Eulersche Zahl exception exception handling exp() cmath exp() (Forts.) complex Exponent... 37, 159 Exponentialfunktion komplexe Zahl extensible Markup Language F f (float) fabs() false Fehler Feld als Parameter Datenbank dynamisch , 105, 275 einfach... 94, 101 einfügen Element Element füllen , 278 Größe... 97, 106 Größe einstellen Index intelligent... 96, 105, 272, 275 kopieren leeren löschen am Ende löschen Element mehrdimensional mehrere Indizes prüfen, ob gleich prüfen, ob leer Schleife statisch... 94, 96, 272 tauschen Unterscheidung vergrößern verzweigt von Objekten von Strings von Strukturvariablen von Zeichen Zugriff Element... 94, 97, 106 FIFO fill()

37 Index Index find() algorithm map set string first fixed Fließkommazahl vergleichen... 44, 162 flip() float floor() fmod() for Feld for_each() forward_list Iterator Freund Funktion Klasse friend , 326 front() deque queue fstream , 246 Funktion als Parameter befreundet Datentyp Definition Deklaration mathematisch Name Parameter Referenz konstant Referenz veränderlich rekursiv... 87, 188 Rückgabewert Standardwert überladen variadisch Funktionstemplate Funktionszeiger Fußgesteuert G g++ Linux macos Windows Ganzzahldivision gedit Genauigkeit... 34, 37 get<>() pair tuple getcwd() getline() Datei istringstream Tastatur GID GL-Bibliothek gleich Global Globaler Namensraum GMT GNU Compiler Collection C Qt Windows , 457 Grafische Oberfläche größer als GUI Gültigkeit global lokal H Hallo Welt GUI Qt Haltepunkt setzen Hoch komplexe Zahl Hochkomma doppelt einfach I id IDE if Präprozessor ifdef ifndef ifstream imag() Imaginärteil , 165 include includes() IND Index inf Initialisierung einfache Zeichenkette Feld , 275 Strukturvariable Summe Variable Inkonsistenz Inkrement Innere Klasse insert_after() insert() deque list map set string vector inserter() Installation für C für Linux für macos für Windows Instanz int... 23, 35, 118, 158 INTEGER Intelligente Zeichenkette Intelligenter Zeiger , 104 Intelligentes Feld... 96, 105, 272, 275 iomanip ios iostream isfinite() isinf() isnan() istringstream , 258 Iterator , 269 array bewegen deque forward_list list map set string vector J jagged array Jahr Java-Laufzeitumgebung Linux Windows K Klammern geschweift... 20, 42 rechteckig rund Klasse... 97, 195 ableiten befreundet Definition innere statisches Element Klassentemplate... 95, 269 eigenes kleiner als Kombinierter Operator Kommando, Betriebssystem Kommandozeile aufrufen Parameter Kommentar Komplexe Zahl aus Betrag und Winkel

38 Index Index Komplexe Zahl (Forts.) Funktion , 168 konjugiert komplex rechnen Komponente Konstante... 38, 350 Existenz prüfen mehrere Konstante Referenz Konstruktor , 203 Vererbung Kontrollstruktur Kopfgesteuert... 59, 62 Kopfrechentrainer Kopierkonstruktor Kosinus L L (long double) Laufzeitfehler left length() Lesbarkeit... 20, 33, 42 libgl LibreOffice Calc , 265 LIFO Linux Befehl cd cp Datei kopieren Datei löschen Datei umbenennen Datei verschieben Installation für C ls mkdir mv rm rmdir Verzeichnis anlegen Verzeichnis auflisten Verzeichnis löschen Verzeichnis wechseln Zugriffsrecht linux/limits.h list Iterator Liste anfügen Element , 290 doppelt verkettet einfach verkettet einfügen Element , 290 einspleißen , 291 einzigartig leeren löschen Element , 287, 290 sortieren umdrehen vereinigen verkettet von Werten... 60, 108, 274 LLVM-Projekt localtime() locate log() cmath complex log10() Logarithmus komplexe Zahl Logische Verknüpfung SQL Lokal long long double lower_bound() M macos, Installation für C main()... 20, 70 Rückgabewert make_pair() make_tuple() make_unique() Makro... 84, 350 vordefiniert Manipulator... 19, 30 Map map Anzahl pro Schlüssel finden Schlüssel map (Forts.) hinzufügen Iterator löschen Element Mathematische Funktion Mehrdimensionales Feld Mehrfachvererbung member memory Menge Mengenlehre merge() algorithm forward_list list Methode... 97, 195 befreundet statisch verketten virtuell MinGW für C in Pfad nutzen Qt Minute mkdir() mktime() Modulo... 50, 154 Monat MS Access MS Excel , 265 multimap Multiplikation multiset N Namensraum... 20, 330 Namensregel namespace... 20, 330 nan NetBeans Linux macos nutzen Windows new next() Nicht (logisch) SQL none() Notepad npos O Objekt... 97, 197 aktuelles ausgeben erzeugen Existenz endet Feld von in Objekt kopieren temporär zuweisen Objektorientierung... 96, 195 Oder (logisch) SQL ofstream open() ifstream ofstream opendir() Operator kombiniert logisch Rangfolge überladen operator Operatormethode Orwell Dev-C ostream ostringstream , 258 P Paar pair map Parameter ist Feld

39 Index Index Parameter (Forts.) ist Funktion Kopie Referenz konstant Referenz veränderlich Regeln Standardwert Struktur PATH_MAX Pfad ändern Pfadangabe , 245 Pfadname, Größe Pi pointer polar() Polymorphie pop_back() deque list string vector pop_front() deque forward_list list pop() queue stack pow() cmath complex Präprozessor prev() PRIMARY KEY private Programm binden in mehreren Dateien Reihenfolge Schritt für Schritt zerlegen protected Prozessortakt public Punkt-Operator... 97, 134 push_back() deque list push_back() (Forts.) string vector , 277 push_front() deque forward_list list push() queue stack Q Qt addbindvalue() adddatabase() additem() , 435 Anwendung schließen append() arg() at() Ausgabefeld Benutzeroberfläche , 374 Bibliothek Buttons Calendar Check Box Check Box markieren Check Box prüfen clear() , 408, 438 clicked() close() , 404 Codefenster Combo Box Combo Box Auswahl , 437 connect() , 375 count() currentindexchanged currentitem() currentrow() databasetext() Date Edit Widget date() Date/Time Edit Datenbankfehler Datenbanktreiber Datenbankverbindung , 403 Qt (Forts.) datetime() DateTimeChanged Design-Ansicht Dial Display Widgets display() Editieren-Ansicht Eingabe Datum Eingabe Zahl Eingabe Zeitwert Eingabefeld Ereignis , 372 exec() , 440 Feld Fokus setzen Fortschrittsbalken fromstring() GUI, Größe ändern GUI-Projekt anlegen Horizontal Slider Input Widgets Installation ischecked() , 389 isvalid() Item Widgets itemselectionchanged Kit Label lasterror() LCD Number Line Edit List Widget List Widget Auswahl , 435 List Widget füllen List Widget leeren List Widget prüfen Listenfeld MainWindow maximum() minimum() Nachrichtenbox , 440, 442 next() numrowsaffected() open() prepare() private slots ProgressBar Qt (Forts.) Projekt erzeugen Projekt kopieren Projekt öffnen Projekt schließen Projekt starten Projektdatei , 402 Projektfenster Push Button QDate , 450 QDateTime QLabel QListWidgetItem QMainWindow qmake QMessageBox QPushButton QSqlDatabase QSqlError QSQLITE QSqlQuery QString QStringList QTime QtSql QVariant QVector QVector hinzufügen QVector leeren QVector löschen QVector prüfen Radio Button Radio Button markieren Radio Button prüfen remove() resize() Schaltfläche Schaltfläche drücken Schieberegler selecteddate() setbuttontext() setchecked() setcurrentindex() setcurrentrow() setdatabasename() setdate() setdatetime() setdefaultbutton()

40 Index Index Qt (Forts.) setdisplayformat() setenabled() setfocus() setmaximum() setmaximumdate() setminimum() setminimumdate() setselecteddate() setstandardbuttons() settext() setvalue() setwindowtitle() Signal , 372 Slot , 372 split() SQL-Befehl senden , 404 StandardButton text() , 450 Titel ändern todouble() toint() tostring() , 409, 450 trimmed() ui Umwandlung in Zahl value() , 409 ValueChanged Verbindung Signal/Slot , 376 Website Wert ändern Widget Widget aktivieren Widget ändern Widget einfügen Widget kopieren Widget leeren Widget löschen Widget-Objekte Willkommen-Ansicht XML-Code Zeichenkette Zeitangabe ändern Qt Creator queue R Radiant RAND_MAX rand() range-based for-loop Rangfolge readdir() REAL real() Realteil , 165 Redundanz Referenz als Parameter auf Feld bereichsbasierte Schleife Rekursion... 87, 188 Relativer Pfad , 245 remove() Datei forward_list list rename() replace() algorithm , 313 string reset() resize(), vector , 277 Rest... 50, 159 return reverse() forward_list list rewinddir() right rmdir() rotate() round() Rundung S Schablone Scharfes S Schleife abbrechen do-while Schleife (Forts.) for for_each() fortsetzen für Bereich geschachtelt sinnvoll Variable while Schlüssel-Wert-Paar Schlüsselwort Schnittmenge scientific... 32, 156 Scope-Operator , 197, 330 second seekg() seekp() Ausgabestrom Datei Sekunde set Anzahl pro Wert finden Wert hinzufügen Wert Iterator leeren löschen Element set_difference() set_intersection() set_symmetric_difference() set_union() set() setfill() setprecision() setw() shared pointer short signed sin() Sinus size_type size() array... 97, 273 bitset vector , 277 sizeof smart pointer sort() forward_list list Speicherbedarf splice_after() splice() SQL AND ASC COUNT() CREATE TABLE Datensätze ändern Datensätze auswählen Datensätze betroffen Datensätze einfügen Datensätze filtern Datensätze gruppieren Datensätze löschen Datensätze sortieren Datensätze summieren Datensätze zählen DELETE DESC Feld auswählen Feld einzigartig Feld Wert GROUP BY INSERT JOIN LIKE logischer Operator nächster Datensatz NOT OR ORDER BY Primärschlüssel , 420 SELECT FROM SUM() Tabelle erzeugen UPDATE Vergleichsoperator , 412 WHERE SQL-Injection SQLite Datentyp sqrt() cmath complex

41 Index Index srand() sstream , 258 st_atime st_ctime st_gid st_mode st_mtime st_size st_uid stack Standardwert, Parameter Stapel stat() static... 81, 210 Statische Variable Statisches Element Statisches Feld... 96, 272 std str() istringstream ostringstream , 260 strcat() strcmp() strcpy() String als einfache Zeichenkette anfügen aus Ausgabestrom aus gleichen Zeichen aus Zahl einfügen ersetzen , 263 Feld von finden kopieren Länge löschen am Ende löschen Zeichen Teil verlängern Zeichen zu Zahl string , 270 Iterator strlen() Stroustrup, Bjarne struct Structured Query Language Struktur als Parameter Feld von in Struktur kopieren Stunde substr() Subtraktion swap() algorithm array pair switch sys/stat.h sys/syslimits.h system() Systempfad ändern Systemweiche T Tabelle Tag im Jahr tan() Tangens tellg() tellp() Template für Funktion für Klasse template Terminal Linux macos test() TEXT Text TextWrangler this , 325 throw tie() time_t time() tm to_string() top() true trunc() try Tupel , 470 tuple tuple_cat() typedef typename U Überladung Funktion Operator Uhrzeit , 352 UID Umlaut Umlenkung Und (logisch) SQL Unendlich ungleich unique pointer , 471 unique() forward_list list unistd.h UNIX-Zeitangabe unordered_map unordered_multimap unordered_multiset unordered_set unsigned... 35, 97 unsigned int upper_bound() using using namespace UTC V va_arg va_end va_list va_start Variable lokal statisch zufälliger Wert Variadische Funktion vector , 275 Iterator mehrdimensional Veränderliche Referenz Vereinigungsmenge Vererbung Konstruktor mehrfach Vergleichsoperator SQL , 412 String Verkettete Liste Verknüpfung logisch logisch (SQL) sinnvoll Verzeichnis ermitteln erzeugen Inhalt auflisten löschen wechseln Zugriff Verzeichnisbaum... 87, 188 Verzweigtes Feld Verzweigung geschachtelt kurz mehrfach... 46, 48 Präprozessor Wahrheitswert virtual void Vorgabewert, Parameter Vorrang Vorzeichenlos W Wahrheitswert... 42, 52, 317 umdrehen

42 Index Warteschlange einfach mit zwei Enden Wertebereich what() while Wiederholung Windows Installation für C Tastenkombination Winkel, komplexe Zahl Winkelfunktion Wissenschaftliche Notation Wochentag Wurzel komplexe Zahl X Xcode XML Z Zahl aus String Betrag definierter Wert Fließkomma... 23, 36 ganz... 23, 34 komplex Zahl (Forts.) prüfen rechnen runden Umwandlungsregeln zu String zufällig Zeichen Zeichenkette intelligent Zeichenkette (einfach) anhängen Ende kopieren Länge vergleichen Zeiger einfach intelligent , 104 Iterator this Zeilenende Zeilenumbruch Zeit addieren aktuell Angabe erstellen messen Zufallszahl Zugriffsrecht , 182 ändern Zuweisung kombiniert... 33

43 Wissen, wie s geht. Thomas Theis ist Dipl.-Ing. Technische Informatik. Er verfügt über langjährige Erfahrung als Softwareentwickler und IT-Dozent, unter anderem an der Fachhochschule Aachen. Er leitet Programmier- Schulungen zu C/C++, Visual Basic und Webprogrammierung und ist Autor vieler erfolgreicher Fachbücher. Thomas Theis Einstieg in C++ Ideal für Programmiereinsteiger 516 Seiten, broschiert, September ,90 Euro, ISBN Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag. Teilen Sie Ihre Leseerfahrung mit uns!

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

2 Einfache Rechnungen

2 Einfache Rechnungen 2 Einfache Rechnungen 2.1 Zahlen Computer, auch bekannt als Rechner, sind sinnvoller eingesetzt, wenn sie nicht nur feste Texte ausgeben, sondern eben auch rechnen. Um das Rechnen mit Zahlen zu verstehen,

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans... Erste Schritte Dieser Teil der Veranstaltung gibt einen ersten Eindruck der Programmierung mit C++. Es wird ein erstes Gefühl von Programmiersprachen vermittelt, ohne auf die gezeigten Bestandteile genau

Mehr

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013 Programmiervorkurs Wintersemester 2012/2013 Organisation: Steffen Gebert, Alexander Wolff Tutoren: Jürgen Zöller, Jonathan Stoll Kontakt (für Organisatorisches, Fehler auf Folien...): Steffen Gebert steffen.gebert@informatik.uni-wuerzburg.de

Mehr

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden:

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden: 3 Grundlagen 3.1 Starten eines C++ Programms Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden: 1. Programme, die vom Interpreter der Programmiersprache Zeile für Zeile interpretiert

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Teil 1: Wiederholung C Heutige Agenda Nutzereingaben verarbeiten Teil 2: Grundlagen in C++ Erstes

Mehr

Zusammengesetzte Datentypen -- Arrays und Strukturen

Zusammengesetzte Datentypen -- Arrays und Strukturen Zusammengesetzte Datentypen -- und Strukturen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Christian-Albrechts-Universität zu Kiel CAU 2-1 Datentypen und Formate Mit der Festlegung des Datentyps wird die Art bestimmt, mit der der Computer die Informationen

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen L AKTUEL ZU fritz JOBST JAVA 8 PROGRAMMIEREN IN JAVA 7. Auflage Im Internet: Alle Beispielprogramme und Lösungen 4 1 Der Einstieg in Java keinem Fall zulässig. Die Schreibweisen Hello.java für den Namen

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Informatik I: Abschnitt 7

Informatik I: Abschnitt 7 Informatik I: Abschnitt 7 Inhalt: 7. Interne Informationsdarstellung 7.1 Ganzzahlige Datentypen 7.2 Gleitkomma-Datentypen Die Folien basieren zum Teil auf einen Foliensatz von R. Großmann und T. Wiedemann

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

Grundlagen der Programmiersprache C++

Grundlagen der Programmiersprache C++ / TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Leseprobe. »Eine erste EinführungUnser erstes ProgrammVerschiedene Arten von DatenVerschiedene Fälle in einem Programm« Inhalt. Index.

Leseprobe. »Eine erste EinführungUnser erstes ProgrammVerschiedene Arten von DatenVerschiedene Fälle in einem Programm« Inhalt. Index. Wissen, wie s geht. Leseprobe Mit diesem Buch gelingt Ihnen der Einstieg in C. In dieser Leseprobe macht Sie Thomas Theis mit den Grundlagen vertraut und entwickelt mit Ihnen ein erstes Programm. Außerdem

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was sind Operatoren? Ein Operator ist eine in die Programmiersprache eingebaute Funktion,

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

EOS Einfache Objektorientierte Sprache. 1. Beschreibung der IDE

EOS Einfache Objektorientierte Sprache. 1. Beschreibung der IDE EOS Einfache Objektorientierte Sprache EOS ist eine IDE mit Interpreter für eine bewusst einfach gehaltene objektorientierte Sprache, die es Schülern ab der Jahrgangsstufe 6 ermöglichen soll, erste Einblicke

Mehr

1 Einführung... 13. 2 Erste Schritte... 19. 3 Programmierkurs... 33. 4 Datentypen... 81. 5 Weiterführende Programmierung... 139

1 Einführung... 13. 2 Erste Schritte... 19. 3 Programmierkurs... 33. 4 Datentypen... 81. 5 Weiterführende Programmierung... 139 Auf einen Blick 1 Einführung... 13 2 Erste Schritte... 19 3 Programmierkurs... 33 4 Datentypen... 81 5 Weiterführende Programmierung... 139 6 Objektorientierte Programmierung... 191 7 Verschiedene Module...

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

FB Informatik. Fehler. Testplan

FB Informatik. Fehler. Testplan Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout

Mehr

Kurzeinführung in C. Johannes J. Schneider 27.10.2004

Kurzeinführung in C. Johannes J. Schneider 27.10.2004 Kurzeinführung in C Johannes J. Schneider 27.10.2004 1 Einleitung C ist eine in vielen Bereichen sehr häufig verwendete Programmiersprache, die von der Betriebssystemprogrammierung bis hin zur Programmierung

Mehr

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken Im Folgenden finden Sie jeweils die korrekte Antwort zu den im Buch abgedruckten Prüfungsfragen, soweit die Antworten in Textform

Mehr

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Algorithmische Kernsprache Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Ausdrücke Anweisungen Ausdrücke bezeichnen einen Wert Kontext stellt Werte von Variablen Werte

Mehr

Grundlegende Anweisungen in C++

Grundlegende Anweisungen in C++ Grundlegende in C++ Peter Bastian Dieses Dokument basiert auf einer ursprünglich englischen Fassung von Katharina Vollmayr-Lee (http: // www. eg. bucknell. edu/ ~ kvollmay/ caps_ s2010/ C+ +_ summary.

Mehr

C Überlebenstraining

C Überlebenstraining C Überlebenstraining Dies ist nur ein Schnellkurs in C, der genug Einstiegswissen vermitteln soll, daß weiterführende Literatur schnell benutzt werden kann. Dies ist kein vollständiger Programmier oder

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Kapitel 3. Mein erstes C-Programm

Kapitel 3. Mein erstes C-Programm Kapitel 3 Mein erstes C-Programm 1 Gliederung Kapitel 3 Mein erstes C-Programm 3.1 Einleitung 3.2 Mein erstes C-Programm 3.3 Zusammenfassung 2 Problem Algorithmus Mittelwert für Messwerte berechnen DGL

Mehr

3 Die Grundrechenarten

3 Die Grundrechenarten 3 Die Grundrechenarten In diesem Kapitel wollen wir uns unter anderem mit folgenden Themen beschäftigen: Operatoren für die Addition, Subtraktion, Multiplikation und Division Modulooperator, auch Restoperator

Mehr

Erlernbarkeit. Einsatzbereich. Preis. Ausführungsort

Erlernbarkeit. Einsatzbereich. Preis. Ausführungsort 1.3 PHP Vorzüge Erlernbarkeit Im Vergleich zu anderen Sprachen ist PHP relativ leicht erlernbar. Dies liegt hauptsächlich daran, dass PHP im Gegensatz zu anderen Sprachen ausschließlich für die Webserver-Programmierung

Mehr

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm Praktikum Ingenieurinformatik Termin 2 Mein erstes C-Programm 1 1. Einleitung 2. Erstes C-Programm 3. Fehler ins Programm einbauen 4. Zweites und drittes C-Programm 5. Installation der Visual C++ 2010

Mehr

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen. Programmierung in C++ Seite: 1 Beispielprogramm 1: Programmierung in C++ int main() int hoehe = 3; int grundseite = 5; double flaeche = hoehe*grundseite*0.5; cout

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Teil IV. Grundlagen der Programmierung

Teil IV. Grundlagen der Programmierung Teil IV Grundlagen der Programmierung Überblick 1 Einleitung zu C und C++ Aufbau von Programmen/Dateien Steueranweisungen Funktionen Mehr zu Datentypen: Felder, Zeiger und Strukturen Arbeit mit Dateien

Mehr

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare

Mehr

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann 1 Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann

Mehr

Grundlagen Programmierung

Grundlagen Programmierung 13. Aufgabe (13 Punkte) Schreiben Sie eine neue Klasse Zahlenanalyse, mit der Integer-Objekte genauer betrachtet werden können. Bei den zu entwickelnden Methoden kann es immer sinnvoll sein, sich den Ablauf

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Die Vererbung ermöglicht es, neue Klassen auf der Basis von schon

Mehr

Objective-C CheatSheet

Objective-C CheatSheet App-Templates: Erstellt automatisch einen Navigation Controller mit editierbarem UITableView und DetailView, der bei Klick auf einzelne UITableViewCell angezeigt wird. Kreiert einen GLKitViewController

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang

Mehr

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale

Mehr

Thomas Theis. Einstieg in Python. Galileo Press

Thomas Theis. Einstieg in Python. Galileo Press Thomas Theis Einstieg in Python Galileo Press 5 Inhalt Inhalt 1 Einführung 17 1.1 Vorteile von Python 17 1.2 Verbreitung von Python 18 1.3 Aufbau des Buchs 18 1.4 Übungen 20 1.5 Installation von Python

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

3 Berechnungen und Variablen

3 Berechnungen und Variablen 3 Berechnungen und Variablen Du hast Python installiert und weißt, wie man die Python-Shell startet. Jetzt kannst Du etwas damit machen. Wir fangen mit ein paar einfachen Berechnungen an und wenden uns

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Aufbau von Programmen/Dateien

Aufbau von Programmen/Dateien Aufbau von Programmen/Dateien Typen von Dateien Header-Dateien (.h): enthalten Deklarationen (auch Signatur, Prototyp, Rumpf) von Funktionen, Variablen, Konstanten und in C++ auch Klassendefinitionen eines

Mehr

Programmieren für Physiker: C++

Programmieren für Physiker: C++ Programmieren für Physiker: C++ Termine: Vorlesung: Di. 8:00-9:30 Uhr, Lehmann-HS (M. Steinhauser) Hörsaalübungen: Fr. 8:00-9:30 Uhr, Lehmann-HS (A. Mildenberger) Computerübungen: (voraussichtlich) (Fragen

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Der Anfänger sollte nicht entmutigt sein, wenn er nicht die Voraussetzungen besitzt, um die Voraussetzungen zu verstehen...

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

Mehr

Grundlagen der Informatik - 6. Praktikum

Grundlagen der Informatik - 6. Praktikum Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Aufgaben: 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge Objektorientierte Programmierung OOP Programmieren mit Java 1. Installation von Java 2. Erstes Java Programm Hello World 3. Dreimal Hallo Olten 2

Mehr

2 Fenster - Hauptelement des GUI

2 Fenster - Hauptelement des GUI Einführung in die objektorientierte Programmierung mit C# 13 2 Bei der Arbeit mit Computern erwarten die Nutzer eine komfortable Bedienung über eine eine»grafische Oberfläche«(engl.: graphical user interface

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Kurs Teil 1 "hello world" Vergleich von C++ und Java Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Spezialitäten Schlüsselwort 'const', Copy Constructor,

Mehr

GetName(), GetName(), GetGeschlecht() und AelterWerden().

GetName(), GetName(), GetGeschlecht() und AelterWerden(). 11. Vererbung Vererbung ist eine der mächtigsten Funktionalitäten der objektorientierten Programmiersprachen. Man versteht unter Vererbung die Tatsache, dass eine Klasse alle Methoden und Variablen einer

Mehr

1. Der Einstieg in Java. Was heißt Programmieren?

1. Der Einstieg in Java. Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen und ausführen können, Möglichkeiten der Kommentierung

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

C++ - Lernen und professionell anwenden

C++ - Lernen und professionell anwenden mitp Professional C++ - Lernen und professionell anwenden von Prof. Dr. Ulla Kirch, Dr. Peter Prinz 6., überarbeitete Auflage 2012 C++ - Lernen und professionell anwenden Kirch / Prinz schnell und portofrei

Mehr

Primitive Datentypen. Dr. Wolfgang Süß Thorsten Schlachter

Primitive Datentypen. Dr. Wolfgang Süß Thorsten Schlachter Dr. Wolfgang Süß Thorsten Schlachter Java-Bezeichner Für Variablen, Methoden, Klassen und Schnittstellen werden Bezeichner auch Identifizierer (von engl. identifier) genannt vergeben. Ein Bezeichner ist

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

09.10.2015. 02.10.2015 + 07.10.2015 Seite 1. 02.10.2015 + 07.10.2015 Seite 2

09.10.2015. 02.10.2015 + 07.10.2015 Seite 1. 02.10.2015 + 07.10.2015 Seite 2 02.10.2015 + 07.10.2015 Seite 1 02.10.2015 + 07.10.2015 Seite 2 1 Anzahl der Klassenarbeiten: Mindestens zwei Klassenarbeiten pro Halbjahr (= 4 KA pro Jahr) Im ersten Ausbildungsjahr gibt es jedoch kein

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Java-Vorkurs 2015. Wintersemester 15/16

Java-Vorkurs 2015. Wintersemester 15/16 Java-Vorkurs 2015 Wintersemester 15/16 Herzlich Willkommen! package de.unistuttgart.47.01.javavorkurs; public class WelcomeErstis { public static void main(string[] args){ System.out.println( Herzlich

Mehr

Erste Schritte mit Eclipse

Erste Schritte mit Eclipse Erste Schritte mit Eclipse März 2008, KLK 1) Java Development Kit (JDK) und Eclipse installieren In den PC-Pools der HAW sind der JDK und Eclipse schon installiert und können mit dem Application Launcher

Mehr

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff Programmieren in C C Syntax Datentypen, Operatoren und Kontrollstrukturen Prof. Dr. Nikolaus Wulff Elementare Typen Imperative und objektorientierte Programmiersprachen bieten i.d.r. einen Satz elementarer

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben

Mehr

Einführung in die. objektorientierte Programmierung

Einführung in die. objektorientierte Programmierung Einführung in die objektorientierte Programmierung Teil 3 Vererbung Modul WI111: Objektorientierte Programmierung Fachrichtung Wirtschaftsinformatik Prof. Dr. Gert Faustmann Fachbereich Berufsakademie

Mehr

Die LogTrace-Bibliothek

Die LogTrace-Bibliothek Die LogTrace-Bibliothek Debugging-Hilfsmittel Weiteres Beispiel Motivation void Func() { FunktionLog var( Func );... Func2();... Ausgabe sollte hier sein: >Func > Func2 < Func2 < Func void Func2() { FunktionLog

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Ein erstes Java-Programm

Ein erstes Java-Programm Ein erstes Java-Programm public class Rechnung { public static void main (String [] arguments) { int x, y; x = 10; y = -1 + 23 * 33 + 3 * 7 * (5 + 6); System.out.print ("Das Resultat ist "); System.out.println

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Objektorientierte Programmierung in Java

Objektorientierte Programmierung in Java Objektorientierte Programmierung in Java 1. Auflage Objektorientierte Programmierung in Java schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Verlag C.H. Beck im Internet:

Mehr

Kapitel 6,»Objektorientierte Programmierung«, widmet sich der objektorientierten Programmierung mit Python.

Kapitel 6,»Objektorientierte Programmierung«, widmet sich der objektorientierten Programmierung mit Python. 1.3 Aufbau des Buchs lichkeiten offen. Auf die Unterschiede der beiden Versionen gehe ich besonders ein, sodass ein späterer Umstieg von der einen zur anderen Version leichtfällt. Erste Zusammenhänge werden

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen

Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik R.

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr