Theis | Einstieg in C++ | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 547 Seiten

Reihe: Rheinwerk Computing

Theis Einstieg in C++

Ideal zum Programmieren lernen
2. Auflage 2020
ISBN: 978-3-8362-7865-2
Verlag: Rheinwerk
Format: PDF
Kopierschutz: 0 - No protection

Ideal zum Programmieren lernen

E-Book, Deutsch, 547 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-7865-2
Verlag: Rheinwerk
Format: PDF
Kopierschutz: 0 - No protection



Mit diesem Buch gelingt Ihnen der Einstieg in die C++-Entwicklung mühelos. Anschauliche Erklärungen, praxisnahe Beispiele und Übungen begleiten Sie von den ersten Schritten bis zum fertigen Programm. Sie lernen alle wichtigen Themen wie Vererbung, Objektorientierung, Polymorphie, GUI-Entwicklung und Datenbanken. Kenntnisse in C oder einer anderen Sprache werden nicht vorausgesetzt.

Aus dem Inhalt:

  • Sprachgrundlagen
  • Referenzen und Pointer
  • Objektorientierte Programmierung
  • Vererbung und Polymorphie
  • Moderne Bibliotheken: chrono, random, thread, filesystem
  • Arbeiten mit Containern
  • GUI-Entwicklung mit Qt
  • Datenbanken mit SQLite verwalten


Die Fachpresse zur Vorauflage:
iX - Magazin für professionelle Informationstechnik: »Wer C++ lernen will oder eine Auffrischung auf C++11 benötigt, dürfte Gefallen an dem knapp 520 Seiten starken Lehrbuch finden.«



Thomas Theis ist Dipl.-Ing. für Technische Informatik und arbeitet als Berater und Trainer. Seit vielen Jahren gibt er als EDV-Dozent Kurse in verschiedenen Programmiersprachen. Er ist Autor vieler erfolgreicher Fachbücher.
Theis Einstieg in C++ jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material




  Materialien zum Buch ... 17


  1.  Eine erste Einführung ... 19


       1.1 ... Was machen wir mit C++? ... 19

       1.2 ... Was benötige ich zum Programmieren? ... 20

       1.3 ... Die Entwicklung von C++ ... 20

       1.4 ... So sieht das erste Programm aus ... 21

       1.5 ... Kommentieren Sie Ihre Programme ... 22



  2.  Arbeiten mit Zahlen und Operatoren ... 25


       2.1 ... Wie speichere ich Zahlen? ... 25

       2.2 ... Rechnen mit Operatoren ... 27

       2.3 ... Fehler suchen ... 29

       2.4 ... Wie können Daten eingegeben werden? ... 31

       2.5 ... Zahlen formatieren mit Manipulatoren ... 33

       2.6 ... Zuweisungen kürzer schreiben ... 34

       2.7 ... Übung ... 36

       2.8 ... Mehr über die Speicherung von Zahlen ... 37

       2.9 ... Feste Werte in Konstanten speichern ... 41

       2.10 ... Konstanten in Enumerationen zusammenfassen ... 42

       2.11 ... Zahlensysteme ... 43

       2.12 ... Initialisierung ... 45

       2.13 ... Wie erzeuge ich zufällige Zahlen? ... 47

       2.14 ... Übung ... 48



  3.  Mehrere Zweige in einem Programm ... 49


       3.1 ... Zwei Zweige mit »if« und »else« ... 49

       3.2 ... Bedingungen benötigen Vergleiche ... 51

       3.3 ... Mehr als zwei Zweige ... 53

       3.4 ... Wie kann ich Bedingungen kombinieren? ... 55

       3.5 ... Zweige zusammenfassen mit »switch« und »case« ... 57

       3.6 ... Was ist mit dem Rest? ... 58

       3.7 ... Welcher Operator hat Vorrang? ... 59

       3.8 ... Übungen ... 60

       3.9 ... Wie speichere ich Wahrheitswerte? ... 63

       3.10 ... Die Kurzform: der bedingte Ausdruck ... 65



  4.  Teile von Programmen wiederholen ... 67


       4.1 ... Regelmäßige Wiederholungen mit »for« ... 67

       4.2 ... Wiederholungen für einen Bereich ... 70

       4.3 ... Bedingte Wiederholungen mit »do-while« ... 71

       4.4 ... Besser vorher prüfen mit »while« ... 72

       4.5 ... Wiederholungen abbrechen oder fortsetzen ... 73

       4.6 ... Die Wiederholung der Wiederholung ... 75

       4.7 ... Übungen ... 76



  5.  Programme aufteilen in Funktionen ... 79


       5.1 ... So schreibe ich eine eigene Funktion ... 79

       5.2 ... Wie übergebe ich Daten? ... 81

       5.3 ... Wie erhalte ich ein Ergebnis zurück? ... 87

       5.4 ... Mehr Ordnung im Programm ... 88

       5.5 ... Statische Variablen behalten ihren Wert ... 90

       5.6 ... Fehler suchen ... 91

       5.7 ... Übungen ... 92

       5.8 ... Standardwerte vorgeben ... 93

       5.9 ... Beliebig viele Parameter ... 94

       5.10 ... Funktionen mehrfach definieren ... 96

       5.11 ... Funktionen, die sich selbst aufrufen ... 98

       5.12 ... Anonyme Funktionen ... 99

       5.13 ... Funktionen als Parameter ... 105



  6.  Große Datenmengen speichern in Feldern ... 109


       6.1 ... Wie werden Felder unterschieden? ... 109

       6.2 ... Einfache Felder mit fester Größe ... 110

       6.3 ... Intelligente Felder mit fester Größe ... 111

       6.4 ... Ausnahmen behandeln ... 113

       6.5 ... Einfache und intelligente Zeiger ... 115

       6.6 ... Intelligente Felder mit variabler Größe ... 122

       6.7 ... Felder initialisieren ... 124

       6.8 ... Felder als Parameter ... 125

       6.9 ... Daten in mehreren Dimensionen speichern ... 127

       6.10 ... Übungen ... 131



  7.  Arbeiten mit Zeichen und Texten ... 133


       7.1 ... Einzelne Zeichen ... 133

       7.2 ... Einfache Zeichenketten ... 134

       7.3 ... Intelligente Zeichenketten: Strings ... 137

       7.4 ... Wie wandle ich Zahlen in Strings um? ... 143

       7.5 ... Wie verarbeite ich Eingaben? ... 144

       7.6 ... Felder von Zeichenketten ... 147

       7.7 ... Suchen und Ersetzen ... 149

       7.8 ... Übungen ... 154



  8.  Daten in Strukturen zusammenfassen ... 157


       8.1 ... Wie speichere ich zusammengehörige Daten? ... 157

       8.2 ... Besser einen Typ definieren ... 159

       8.3 ... Strukturen und Felder ... 161

       8.4 ... Strukturen und Funktionen ... 165

       8.5 ... Eine Hierarchie von Strukturen ... 170

       8.6 ... Übung ... 172



  9.  Vorhandene Funktionen nutzen ... 175


       9.1 ... Umgang mit Datum und Uhrzeit ... 175

       9.2 ... Bessere zufällige Zahlen ... 181

       9.3 ... Mehrere Threads zur gleichen Zeit ... 184

       9.4 ... Nützliche mathematische Funktionen ... 193

       9.5 ... Übungen ... 202

       9.6 ... Rechnen mit komplexen Zahlen ... 203

       9.7 ... Daten mit dem Betriebssystem austauschen ... 210

       9.8 ... Zugriff auf Dateien und Verzeichnisse ... 219



10.  Eigene Klassen entwerfen ... 237


       10.1 ... Klassen umfassen Eigenschaften und Methoden ... 237

       10.2 ... Schützen Sie die Daten ... 240

       10.3 ... Wie erzeuge und lösche ich Objekte? ... 244

       10.4 ... Statische Elemente einer Klasse ... 248

       10.5 ... Wie überlade ich Operatoren? ... 252

       10.6 ... Objekte und Felder ... 256

       10.7 ... Objekte ausgeben ... 260

       10.8 ... Eigenschaften können Objekte sein ... 262

       10.9 ... Übungen ... 264



11.  Vererbung und Polymorphie ... 269


       11.1 ... Basisklasse und abgeleitete Klassen ... 269

       11.2 ... Welche Elemente sind an welcher Stelle erreichbar? ... 276

       11.3 ... Konstruktoren in abgeleiteten Klassen ... 277

       11.4 ... Was bedeutet Polymorphie? ... 281

       11.5 ... Erben von mehreren Klassen ... 284



12.  Datenströme verarbeiten ... 289


       12.1 ... Sequenzielles Schreiben und Lesen ... 289

       12.2 ... Schreiben und Lesen an beliebiger Stelle ... 296

       12.3 ... Wie leiten Sie Datenströme? ... 305

       12.4 ... Wie ist das CSV-Format zum Austausch aufgebaut? ... 308

       12.5 ... Übung ... 315



13.  Container sind vielfältige Datenstrukturen ... 319


       13.1 ... Wie durchlaufe ich Container? ... 320

       13.2 ... Intelligente Felder mit fester Größe ... 322

       13.3 ... Intelligente Felder mit variabler Größe ... 326

       13.4 ... Eine Warteschlange mit zwei Enden ... 330

       13.5 ... Daten in Listen verketten ... 334

       13.6 ... Drei einfache Container ... 344

       13.7 ... Zwei nützliche Typen ... 351

       13.8 ... Eine Menge von Elementen ... 355

       13.9 ... Schlüssel und Werte in einer Map ... 362

       13.10 ... Algorithmen für Bereiche ... 369

       13.11 ... Mengenlehre ... 374

       13.12 ... Eine Menge von Bits ... 378



14.  Mehr zu eigenen Klassen ... 383


       14.1 ... Objekte initialisieren, kopieren und erzeugen ... 383

       14.2 ... Klassen können Freunde haben ... 386

       14.3 ... Namen müssen eindeutig sein ... 389

       14.4 ... Fehler behandeln mit Ausnahmen ... 392

       14.5 ... Innere Klassen ... 400

       14.6 ... Templates sind Vorlagen ... 402



15.  Präprozessor-Anweisungen ... 409


       15.1 ... Einbinden von Dateien ... 409

       15.2 ... Definitionen und Makros ... 410

       15.3 ... Definitionen und Verzweigungen ... 412

       15.4 ... Eine Systemweiche ... 414



16.  Grafische Benutzeroberflächen mit der Qt-Bibliothek ... 417


       16.1 ... Die erste GUI-Anwendung ... 418

       16.2 ... Ein einfacher Kopfrechentrainer ... 429

       16.3 ... Ein erweiterter Kopfrechentrainer ... 434

       16.4 ... Weitere Widgets ... 441



17.  Datenbanken mit SQLite verwalten ... 449


       17.1 ... Der Aufbau einer Datenbank ... 449

       17.2 ... Wie erzeuge ich Datenbank und Tabelle? ... 450

       17.3 ... Wie speichere ich Daten in einer Tabelle? ... 455

       17.4 ... So zeige ich alle Daten einer Tabelle an ... 457

       17.5 ... Wie wähle ich bestimmte Daten aus? ... 460

       17.6 ... Der Benutzer wählt Daten aus ... 464

       17.7 ... Daten sollten sortiert werden ... 465

       17.8 ... Wie ändere ich Daten? ... 466

       17.9 ... Vorsicht beim Löschen von Daten ... 468

       17.10 ... Eine Datenbank mit mehreren Tabellen ... 469

       17.11 ... Projekt Vokabeln ... 476

       17.12 ... Übung ... 497



  Anhang ... 501


       A ... Installationen ... 501

       B ... Hilfestellungen und Übersichten ... 525



  Index ... 531


2.8    Mehr über die Speicherung von Zahlen


Sie können an dieser Stelle bereits mit dem nächsten Kapitel fortfahren und die weiteren Abschnitte dieses Kapitels bei Bedarf später bearbeiten. 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: Ganze Zahlen werden in den Variablen mathematisch genau gespeichert. Die verschiedenen Datentypen unterscheiden sich im Speicherbedarf und im gültigen Wertebereich.

Für Fließkommazahlen werden häufig Variablen des Datentyps double genutzt. Auch hier gibt es weitere Datentypen. Sie unterscheiden sich ebenfalls im Speicherbedarf und im gültigen Wertebereich. Zudem bieten sie eine unterschiedliche Genauigkeit. Sie sind allerdings niemals mathematisch genau.

2.8.1    Ganzzahlige Datentypen


Zunächst ein Programm mit den ganzzahligen Datentypen:

#include
#include
using namespace std;
int main()
{
cout << "short: " << sizeof(short) << " Byte, ";
cout << "von " << SHRT_MIN << " bis " << SHRT_MAX << endl;

cout << "unsigned short: "
<< sizeof(unsigned short) << " Byte, ";
cout << "von 0 bis " << USHRT_MAX << endl;

cout << "int: " << sizeof(int) << " Byte, ";
cout << "von " << INT_MIN << " bis " << INT_MAX << endl;
int a = 42;

cout << "unsigned int: " << sizeof(unsigned int) << " Byte, ";
cout << "von 0 bis " << UINT_MAX << endl;
unsigned int b = 42U;

cout << "long: " << sizeof(long) << " Byte, ";
cout << "von " << LONG_MIN << " bis " << LONG_MAX << endl;
long c = 42L;

cout << "unsigned long: " << sizeof(unsigned long) << " Byte, ";
cout << "von 0 bis " << ULONG_MAX << endl;
unsigned long d = 42UL;

cout << "long long: " << sizeof(long long) << " Byte, ";
cout << "von " << LLONG_MIN << " bis " << LLONG_MAX << endl;
long long e = 42LL;

cout << "unsigned long long: "
<< sizeof(unsigned long long) << " Byte, ";
cout << "von 0 bis " << ULLONG_MAX << endl;
unsigned long long f = 42ULL;

int x = 2'000'000'000;
cout << "Viele Ziffern: " << x << endl;
}

Listing 2.6    Datei »datentyp_ganz.cpp«

Es werden die ganzzahligen Datentypen short, int, long und long long zusammen mit ihren vorzeichenlosen Varianten vorgestellt.

Die Bezeichnung unsigned bedeutet vorzeichenlos, also ohne Vorzeichen. Das Gegenteil von unsigned ist signed und bedeutet vorzeichenbehaftet, 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 vorzeichenbehafteten Datentyps.

Der Operator sizeof liefert den compiler-abhängigen 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, u. a. zur Speicherung der Grenzen der verschiedenen Wertebereiche. Sie werden mithilfe des Headers climits zur Verfügung gestellt. In Abschnitt 2.9, »Feste Werte in Konstanten speichern«, sehen Sie, wie Sie eigene Konstanten definieren können.

Ganze Zahlen werden standardmäßig dem passenden Datentyp zugeordnet. Falls Sie den Datentyp selbst festlegen möchten, müssen Sie die zugehörigen Literale verwenden. Die Zahl 42 wird als int-Wert erkannt, die Zahl 42U als unsigned int-Wert, die Zahl 42L als long-Wert, die Zahl 42UL als unsigned long-Wert, die Zahl 42LL als long long-Wert und die Zahl 42ULL als unsigned long long-Wert. Bei den Literalen können auch Klein- statt Großbuchstaben genutzt werden.

Seit C++14 kann der Apostroph als Trennzeichen zur besseren Lesbarkeit von langen Ziffernfolgen eingesetzt werden.

Die Angaben für den Speicherbedarf und den Wertebereich sind compiler-abhängig. Bei der Nutzung von MinGW unter Windows sehen Sie die folgende Ausgabe:

short: 2 Byte, von -32768 bis 32767
unsigned short: 2 Byte, von 0 bis 65535
int: 4 Byte, von -2147483648 bis 2147483647
unsigned int: 4 Byte, von 0 bis 4294967295
long: 4 Byte, von -2147483648 bis 2147483647
unsigned long: 4 Byte, von 0 bis 4294967295
long long: 8 Byte, von -9223372036854775808 bis 9223372036854775807
unsigned long long: 8 Byte, von 0 bis 18446744073709551615
Viele Ziffern: 2000000000

Bei der Nutzung des GCC-Compilers unter Ubuntu Linux oder des Clang-Compilers unter macOS stehen dem Datentyp long acht Byte zur Verfügung. Es folgt der zugehörige Teil der Ausgabe:

long: 8 Byte, von -9223372036854775808 bis 9223372036854775807
unsigned long: 8 Byte, von 0 bis 18446744073709551615

2.8.2    Datentypen für Fließkommazahlen


Es folgt ein Programm mit den Datentypen für Fließkommazahlen:

#include
#include
#include
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;
cout << "1/7 in double: " << 1.0 / 7 << endl;
cout << "1/7 in long double: " << 1.0L / 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 kleinem e oder auch großem E. Sie sehen sie bei der Ausgabe der Grenzen der Wertebereiche. Zwei weitere Beispiele:

5.2e3 = 5.2 * 103 = 5.2 * 1000 = 5200

5.2e-3 = 5.2 * 10-3 = 5.2 * 0.001 = 0.0052

Anhand der Division von 1 durch 7 wird die unterschiedliche Genauigkeit verdeutlicht. Das mathematisch genaue Ergebnis enthält unendlich oft die Zahlenfolge 142857. 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.

Fließkommazahlen werden standardmäßig dem Datentyp double zugeordnet. Falls Sie den Datentyp selbst festlegen möchten, müssen Sie auch hier die zugehörigen Literale verwenden....


Theis, Thomas
Thomas Theis ist Dipl.-Ing. für Technische Informatik. Als Softwareentwickler verfügt er über langjährige Erfahrung, ebenso als IT-Dozent unter anderem an der Fachhochschule Aachen. Er ist Autor vieler erfolgreicher Fachbücher, zum Beispiel zu den Themen Python, C#, PHP, JavaScript, C++ und Unity.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.