C++-Tutorial

Dieses Tutorial bietet einen umfassenden, praxisnahen Einstieg in C++. Es richtet sich an erwachsene Lernende, die gründlich und strukturiert die Sprache C++ von Grund auf lernen oder ihr Wissen vertiefen möchten.

Inhaltsverzeichnis

  1. Was ist C++?
  2. Installation und erste Schritte
  3. Grundlagen: Syntax, Variablen & Datentypen
  4. Einfache Ein- und Ausgabe
  5. Operatoren und Rechnen
  6. Kontrollstrukturen: Bedingungen und Schleifen
  7. Funktionen und Argumente
  8. Arrays und Strings
  9. Zeiger und Referenzen
  10. Strukturen und Enums
  11. Klassen und Objektorientierte Programmierung
  12. Templates
  13. Standardbibliothek (STL)
  14. Dateien lesen und schreiben
  15. Fehlerbehandlung
  16. Praxisprojekte und Übungen
  17. Empfohlene Ressourcen

1. Was ist C++?

C++ ist eine leistungsfähige, weit verbreitete Programmiersprache, die als Erweiterung von C entwickelt wurde. Sie wird in Systemprogrammierung, Spieleentwicklung, eingebetteten Systemen, wissenschaftlicher Software und vielen weiteren Bereichen eingesetzt.
C++ unterstützt prozedurale, objektorientierte und generische Programmierung.
Typische Anwendungen: Spiele, Betriebssysteme, Datenbanken, Echtzeitsysteme, Simulationen.

2. Installation und erste Schritte

Tipp: Für Einsteiger empfiehlt sich Code::Blocks mit MinGW-Compiler (Windows) oder g++ auf Linux/Mac.

Erstes Programm („Hello, World!“)

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}

3. Grundlagen: Syntax, Variablen & Datentypen

Datentypen

TypBeispielBeschreibung
int int a = 5; Ganzzahl
double double pi = 3.14; Gleitkommazahl
char char c = 'A'; Einzelnes Zeichen
bool bool ok = true; Wahr/Falsch
string string name = "Anna"; Text (ab C++11, #include <string>)
#include <iostream>
#include <string>
using namespace std;

int main() {
    int alter = 30;
    double preis = 19.99;
    char zeichen = 'Z';
    bool fertig = false;
    string name = "Maria";
    cout << name << " ist " << alter << " Jahre alt." << endl;
    return 0;
}

4. Einfache Ein- und Ausgabe

#include <iostream>
using namespace std;

int main() {
    string name;
    cout << "Wie heißen Sie? ";
    cin >> name;
    cout << "Hallo, " << name << "!" << endl;
    return 0;
}

cin liest Eingaben, cout gibt aus. Für mehrere Wörter als Eingabe verwende getline(cin, name);.

5. Operatoren und Rechnen

int a = 7, b = 3;
cout << a + b << endl;   // Addition
cout << a - b << endl;   // Subtraktion
cout << a * b << endl;   // Multiplikation
cout << a / b << endl;   // Ganzzahl-Division
cout << a % b << endl;   // Rest (Modulo)

Vergleichsoperatoren: ==, !=, <, >, <=, >=
Logische Operatoren: && (und), || (oder), ! (nicht)

6. Kontrollstrukturen: Bedingungen und Schleifen

Bedingungen (if, else if, else)

int zahl;
cout << "Geben Sie eine Zahl ein: ";
cin >> zahl;
if (zahl > 0) {
    cout << "Positiv" << endl;
} else if (zahl == 0) {
    cout << "Null" << endl;
} else {
    cout << "Negativ" << endl;
}

Schleifen

for-Schleife

for (int i = 1; i <= 10; i++) {
    cout << i << " ";
}

while-Schleife

int i = 1;
while (i <= 10) {
    cout << i << " ";
    i++;
}

do-while-Schleife

int i = 1;
do {
    cout << i << " ";
    i++;
} while (i <= 10);

break und continue

for (int i = 0; i < 10; i++) {
    if (i == 5) break;    // Schleife beenden
    if (i % 2 == 0) continue; // nächsten Durchlauf
    cout << i << " ";
}
Aufgabe: Schreibe ein Programm, das alle geraden Zahlen von 1 bis 100 ausgibt.

7. Funktionen und Argumente

int addiere(int a, int b) {
    return a + b;
}

int main() {
    int summe = addiere(5, 7);
    cout << "Summe: " << summe << endl;
    return 0;
}

Funktionen mit Standardwerten

int multipliziere(int a, int b = 2) {
    return a * b;
}

Funktionsprototypen

int quadrat(int x); // Prototyp

int main() {
    cout << quadrat(4) << endl;
    return 0;
}

int quadrat(int x) {
    return x * x;
}

8. Arrays und Strings

Arrays

int zahlen[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    cout << zahlen[i] << " ";
}

Strings

#include <string>
string text = "Hallo";
cout << text.length() << endl;
cout << text.substr(0, 3) << endl;

9. Zeiger und Referenzen

Zeiger

int a = 5;
int* ptr = &a;      // Zeiger auf a
cout << *ptr << endl; // Dereferenzierung (Wert von a)

Referenzen

void verdoppeln(int &x) {
    x = x * 2;
}
int main() {
    int zahl = 10;
    verdoppeln(zahl);
    cout << zahl << endl; // 20
    return 0;
}

Dynamische Speicherverwaltung

int* arr = new int[10]; // Speicher reservieren
arr[0] = 42;
delete[] arr;           // Speicher wieder freigeben

10. Strukturen und Enums

Strukturen

struct Person {
    string name;
    int alter;
};

Person p1;
p1.name = "Anna";
p1.alter = 28;
cout << p1.name << " (" << p1.alter << ")" << endl;

Enums

enum Wochentag { Mo, Di, Mi, Do, Fr, Sa, So };
Wochentag heute = Mi;
if (heute == Mi) cout << "Es ist Mittwoch." << endl;

11. Klassen und Objektorientierte Programmierung

class Auto {
public:
    string marke;
    int baujahr;
    void hupen() {
        cout << "Hup Hup!" << endl;
    }
};

int main() {
    Auto meinAuto;
    meinAuto.marke = "VW";
    meinAuto.baujahr = 2020;
    meinAuto.hupen();
    return 0;
}

Konstruktoren und Destruktoren

class Auto {
public:
    Auto() { cout << "Auto gebaut!" << endl; }
    ~Auto() { cout << "Auto verschrottet!" << endl; }
};

Vererbung

class Fahrzeug {
public:
    void fahren() { cout << "Fährt!" << endl; }
};

class Auto : public Fahrzeug {
public:
    void hupen() { cout << "Hup Hup!" << endl; }
};

Auto a;
a.fahren();
a.hupen();

Polymorphismus

class Tier {
public:
    virtual void sprich() { cout << "Ein Tier macht ein Geräusch." << endl; }
};

class Hund : public Tier {
public:
    void sprich() override { cout << "Wuff!" << endl; }
};

Tier* t = new Hund();
t->sprich(); // "Wuff!"
delete t;

Freundfunktionen und -klassen

class Geheimnis {
private:
    int geheim = 42;
    friend void zeigeGeheimnis(const Geheimnis& g);
};

void zeigeGeheimnis(const Geheimnis& g) {
    cout << g.geheim << endl;
}

12. Templates

template <typename T>
T maximum(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    cout << maximum(4, 7) << endl;
    cout << maximum(3.5, 2.1) << endl;
    return 0;
}

Templates ermöglichen generische Programmierung (z.B. für Listen beliebigen Typs).

13. Standardbibliothek (STL)

  • Vektoren: Dynamische Arrays (#include <vector>)
  • Listen: Doppelt verkettete Listen (#include <list>)
  • Maps: Assoziative Arrays (#include <map>)
  • Sets: Mengen (#include <set>)
  • Algorithmen: #include <algorithm> (z.B. sort(), find())
#include <vector>
#include <algorithm>

vector<int> zahlen = {4, 2, 8, 1};
sort(zahlen.begin(), zahlen.end());
for (int x : zahlen) cout << x << " ";

14. Dateien lesen und schreiben

#include <fstream>
#include <string>
using namespace std;

int main() {
    ofstream datei("beispiel.txt");
    datei << "Hallo Datei!" << endl;
    datei.close();

    ifstream eingabe("beispiel.txt");
    string zeile;
    while (getline(eingabe, zeile)) {
        cout << zeile << endl;
    }
    eingabe.close();
    return 0;
}

15. Fehlerbehandlung

try {
    throw runtime_error("Ein Fehler ist aufgetreten!");
} catch (const exception& e) {
    cout << "Fehler: " << e.what() << endl;
}

Fehler werden mit throw ausgelöst und mit catch behandelt. Die Standardbibliothek bietet viele Ausnahme-Typen (std::exception und abgeleitete Klassen).

16. Praxisprojekte und Übungen

  • Schreibe einen Rechner für Grundrechenarten.
  • Erstelle ein Programm, das Namen sortiert und ausgibt.
  • Implementiere eine einfache Kontaktverwaltung mit Datei-Speicherung.
  • Simuliere ein Lotto-Spiel.
  • Baue ein kleines Text-Adventure.
  • Erstelle eine Klasse „Bruch“ mit Operatorüberladung für +, -, *, /.
Aufgabe: Wähle eines der oben genannten Projekte aus und setze es Schritt für Schritt um. Dokumentiere deinen Code und versuche, eigene Erweiterungen einzubauen.

17. Empfohlene Ressourcen

Tipp: Übe regelmäßig, lies Fehlermeldungen aufmerksam und probiere eigene kleine Projekte aus. Die C++-Community ist groß und hilfsbereit – nutze Foren wie Stack Overflow für Fragen.

Viel Erfolg beim Lernen und Programmieren mit C++!