Zum Inhalt springen

C++ (Programmiersprache) - aiMOOC

Aus MOOCsWiki Staging



C++ (Programmiersprache) - aiMOOC



C++ (Programmiersprache)


Einleitung

C++ ist eine Programmiersprache, die besonders dort eingesetzt wird, wo Software schnell, effizient, flexibel und nah an der Hardware arbeiten soll. Du findest C++ in Betriebssystemen, Treibern, eingebetteten Systemen, Computerspielen, Simulationen, Datenbanken, Webbrowsern, Hochleistungsrechnen und vielen technischen Anwendungen. Gleichzeitig ist C++ eine Sprache, die mehrere Programmierparadigmen unterstützt: imperative Programmierung, objektorientierte Programmierung, generische Programmierung und funktional geprägte Techniken.

Dieser aiMOOC führt Dich Schritt für Schritt in die wichtigsten Ideen von C++ ein. Du lernst, wie C++ entstanden ist, wie ein Programm übersetzt wird, wie Variablen, Datentypen, Kontrollstrukturen, Funktionen, Klassen, Objekte, Templates, Speicherverwaltung und die Standardbibliothek zusammenhängen. Ziel ist nicht, jede Einzelheit der Sprache auswendig zu lernen, sondern die Denkweise moderner C++-Programmierung zu verstehen.


Lernziele

Nach diesem aiMOOC kannst Du erklären, was C++ von vielen anderen Programmiersprachen unterscheidet. Du kannst den Weg vom Quellcode zum ausführbaren Programm beschreiben, einfache C++-Programme lesen, wichtige Bestandteile wie Compiler, Linker, Headerdateien, Namespaces, Klassen, Objekte, Zeiger, Referenzen, Templates und STL einordnen. Außerdem kannst Du bewerten, warum moderne C++-Entwicklung besonderen Wert auf Typsicherheit, Ressourcenmanagement, Tests, Debugging und klare Softwarearchitektur legt.


Geschichte und Entwicklung

C++ wurde von Bjarne Stroustrup ab Ende der 1970er-Jahre in den Bell Labs entwickelt. Die Sprache entstand aus dem Wunsch, die Effizienz und Systemnähe von C mit stärkeren Mitteln zur Strukturierung großer Programme zu verbinden. Eine frühe Bezeichnung war C with Classes, weil Klassen und objektorientierte Konzepte zunächst im Mittelpunkt standen. Später kamen viele weitere Sprachmittel hinzu, darunter Templates, Ausnahmebehandlung, Namensräume, RAII, Lambda-Ausdrücke, Concepts, Module und eine umfangreiche Standardbibliothek.

C++ wird durch einen internationalen Standardisierungsprozess weiterentwickelt. Die erste ISO-Norm erschien 1998. Wichtige moderne Fassungen sind C++11, C++14, C++17, C++20 und C++23. Der aktuelle veröffentlichte ISO-Standard ist C++23, formal ISO/IEC 14882:2024. Viele Entwicklerinnen und Entwickler sprechen von Modern C++, wenn sie C++ ab C++11 meinen, weil seitdem viele Sprachmittel eingeführt wurden, die sichereren, klareren und ausdrucksstärkeren Code ermöglichen.


Grundidee von C++

C++ verbindet zwei Ziele, die auf den ersten Blick schwer zusammenpassen: Einerseits erlaubt die Sprache sehr genaue Kontrolle über Speicher, Laufzeit, Datenstrukturen und Hardware. Andererseits bietet sie mächtige Abstraktionen, mit denen große Programme übersichtlich aufgebaut werden können. Eine zentrale Leitidee ist die Zero-Overhead-Abstraktion: Gute Abstraktionen sollen im Idealfall keinen unnötigen Laufzeitaufwand verursachen. Wenn Du etwa eine Klasse, ein Template oder einen Container nutzt, soll daraus effizienter Maschinencode entstehen können.

C++ ist daher keine reine Anfängersprache. Sie belohnt sorgfältiges Denken über Algorithmen, Datenmodelle, Schnittstellen, Speicherverwaltung und Fehlerbehandlung. Genau deshalb eignet sie sich gut, um grundlegende Konzepte der Informatik zu verstehen.


Vom Quellcode zum Programm

Ein C++-Programm wird in der Regel nicht direkt ausgeführt. Zuerst schreibst Du Quellcode in Dateien, zum Beispiel mit der Endung .cpp oder .hpp. Dann verarbeitet ein Präprozessor Anweisungen wie #include. Anschließend übersetzt ein Compiler den Quellcode in Objektcode. Ein Linker verbindet mehrere Programmteile und Bibliotheken zu einem ausführbaren Programm.

Ein sehr kleines Programm sieht so aus:

#include <iostream>

int main() {
    std::cout << "Hallo, C++!\n";
    return 0;
}

Die Zeile #include <iostream> bindet Funktionen für Ein- und Ausgabe ein. Die Funktion main ist der Startpunkt vieler C++-Programme. std::cout schreibt Text in die Konsole. Der Rückgabewert 0 bedeutet üblicherweise, dass das Programm erfolgreich beendet wurde.


Werkzeuge

Für die Entwicklung brauchst Du einen Editor oder eine IDE, einen Compiler, oft ein Build-System und Werkzeuge für Versionsverwaltung, Tests und Fehlersuche. Häufig genutzte Compiler sind GCC, Clang und Microsoft Visual C++. Ein einfaches Kompilieren auf der Kommandozeile kann so aussehen:

g++ -std=c++23 -Wall -Wextra -pedantic main.cpp -o programm
./programm

Die Option -std=c++23 wählt eine Sprachfassung. Die Warnoptionen -Wall und -Wextra helfen Dir, mögliche Fehler früh zu erkennen. In professionellen Projekten werden zusätzlich CMake, Continuous Integration, Unit-Tests, Profiler und statische Codeanalyse eingesetzt.

{{#ev:youtube| https://www.youtube.com/watch?v=NReDubvNjRg |500|center}}


Datentypen, Variablen und Ausdrücke

In C++ hat jeder Ausdruck einen Datentyp. Beispiele sind int für ganze Zahlen, double für Gleitkommazahlen, bool für Wahrheitswerte und char für Zeichen. Mit der Standardbibliothek kommen viele weitere Typen hinzu, zum Beispiel std::string für Zeichenketten und std::vector für dynamische Folgen von Elementen.

#include <iostream>
#include <string>

int main() {
    int alter = 16;
    double temperatur = 21.5;
    bool bestanden = true;
    std::string name = "Ada";

    std::cout << name << " ist " << alter << " Jahre alt.\n";
}

C++ ist statisch typisiert. Das bedeutet, dass viele Typfehler bereits beim Kompilieren entdeckt werden können. Mit auto kann der Compiler den Typ aus dem Zusammenhang ableiten. Das ist praktisch, sollte aber so eingesetzt werden, dass der Code verständlich bleibt.


Kontrollstrukturen

Mit Kontrollstrukturen entscheidest Du, welche Anweisungen ausgeführt werden. Zu den wichtigsten gehören if, else, switch, for, while und do while. Sie bilden die Grundlage für Algorithmen.

#include <iostream>

int main() {
    int zahl = 7;

    if (zahl % 2 == 0) {
        std::cout << "gerade\n";
    } else {
        std::cout << "ungerade\n";
    }

    for (int i = 1; i <= 5; ++i) {
        std::cout << i << "\n";
    }
}

Achte bei Schleifen immer darauf, dass die Abbruchbedingung erreichbar ist. Endlosschleifen können sinnvoll sein, etwa in Echtzeitsystemen, sind aber häufig ein Zeichen für einen Fehler.


Funktionen und Schnittstellen

Funktionen zerlegen ein Programm in überschaubare Einheiten. Eine gute Funktion hat eine klare Aufgabe, einen verständlichen Namen und möglichst wenige versteckte Abhängigkeiten. Funktionsparameter können per Wert, per Referenz oder per Zeiger übergeben werden.

#include <iostream>

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

void begruesse(const std::string& name) {
    std::cout << "Hallo, " << name << "!\n";
}

const bedeutet, dass ein Wert nicht verändert werden soll. Die Kombination const std::string& übergibt eine Zeichenkette effizient, ohne sie zu kopieren, und schützt sie zugleich vor Veränderung. Solche Entscheidungen sind typisch für C++: Du denkst sowohl über Bedeutung als auch über Effizienz nach.


Objektorientierte Programmierung

Objektorientierte Programmierung ordnet Daten und Verhalten in Klassen und Objekten. Eine Klasse ist ein Bauplan. Ein Objekt ist eine konkrete Instanz dieses Bauplans. C++ unterstützt Kapselung, Vererbung und Polymorphie. Moderne C++-Entwicklung nutzt Vererbung jedoch gezielt und bevorzugt oft klare Schnittstellen, einfache Werttypen und Komposition.

#include <iostream>
#include <string>

class Konto {
private:
    std::string inhaber;
    double saldo;

public:
    Konto(std::string name, double start)
        : inhaber{name}, saldo{start} {}

    void einzahlen(double betrag) {
        if (betrag > 0) {
            saldo += betrag;
        }
    }

    double kontostand() const {
        return saldo;
    }
};

int main() {
    Konto k{"Mina", 100.0};
    k.einzahlen(25.0);
    std::cout << k.kontostand() << "\n";
}

Die privaten Daten einer Klasse sind von außen nicht direkt zugänglich. Dadurch entsteht Kapselung: Die Klasse kontrolliert selbst, wie ihr Zustand verändert wird. Das verbessert Wartbarkeit und schützt vor ungültigen Zuständen.


Speicher, Zeiger und Referenzen

C++ erlaubt eine sehr genaue Kontrolle über Speicherverwaltung. Das ist mächtig, kann aber fehleranfällig sein. Ein Zeiger speichert eine Speicheradresse. Eine Referenz ist ein alternativer Name für ein bestehendes Objekt. Fehler wie Zugriff auf freigegebenen Speicher, Speicherlecks oder ungültige Zeiger gehören zu den klassischen Problemen systemnaher Programmierung.

Moderne C++-Programme vermeiden unnötige rohe Zeiger für Besitzverhältnisse. Stattdessen werden RAII und Smart Pointer genutzt. RAII steht für Resource Acquisition Is Initialization. Die Grundidee lautet: Eine Ressource wird an die Lebensdauer eines Objekts gebunden. Wenn das Objekt zerstört wird, wird die Ressource automatisch freigegeben.

#include <memory>

struct Sensor {
    void messen() {}
};

int main() {
    auto sensor = std::make_unique<Sensor>();
    sensor->messen();
}

std::unique_ptr drückt aus, dass genau ein Objekt für eine Ressource verantwortlich ist. Das ist klarer und sicherer als manuelles new und delete. In gutem modernem C++ kommen direkte Speicherfreigaben im Anwendungscode selten vor.


Standardbibliothek und STL

Die C++-Standardbibliothek bietet viele Bausteine, die Du nicht selbst neu erfinden musst. Besonders wichtig sind Container, Iteratoren, Algorithmen, Zeichenketten, Ein- und Ausgabe, Zeitfunktionen, Threads, Dateisystemzugriff und Hilfstypen.

Ein klassisches Beispiel ist die Zusammenarbeit von std::vector, Iteratoren und std::sort:

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> zahlen {4, 1, 3, 2};
    std::sort(zahlen.begin(), zahlen.end());

    for (int zahl : zahlen) {
        std::cout << zahl << " ";
    }
}

std::vector ist ein dynamischer Sequenzcontainer. std::sort ist ein Algorithmus. Die Verbindung entsteht über Iteratoren. Dieses Zusammenspiel ist typisch für generische Programmierung in C++: Algorithmen werden so geschrieben, dass sie mit vielen passenden Datentypen funktionieren.


Templates und generische Programmierung

Templates ermöglichen generische Programmierung. Du kannst Funktionen und Klassen so formulieren, dass sie für verschiedene Typen funktionieren. Dadurch lassen sich wiederverwendbare Bibliotheken entwickeln.

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

Die Funktion maximum kann für verschiedene Typen verwendet werden, sofern diese Typen mit dem Operator < vergleichbar sind. Seit C++20 können Concepts solche Anforderungen genauer ausdrücken. Das verbessert Fehlermeldungen und macht Schnittstellen verständlicher.


Fehlerbehandlung

Fehler können in C++ auf verschiedene Weise behandelt werden. Einfache Funktionen geben manchmal Fehlercodes zurück. Für außergewöhnliche Situationen gibt es Exceptions. Außerdem werden in modernem C++ häufig Typen wie std::optional oder std::expected genutzt, um fehlende Werte oder erwartbare Fehler explizit darzustellen.

Wichtig ist, zwischen Programmierfehlern und Laufzeitproblemen zu unterscheiden. Ein ungültiger Index in einem Array ist oft ein Programmierfehler. Eine nicht vorhandene Datei ist ein erwartbares Laufzeitproblem. Gute C++-Programme machen solche Unterschiede sichtbar.


Sicherheit und typische Fehlerquellen

C++ gibt Dir viel Freiheit. Freiheit bedeutet aber Verantwortung. Typische Fehlerquellen sind nicht initialisierte Variablen, ungültige Zeiger, Datenrennen in nebenläufigen Programmen, Zugriff außerhalb von Arraygrenzen, falsche Besitzverhältnisse und undefiniertes Verhalten. Undefiniertes Verhalten bedeutet, dass der Sprachstandard kein bestimmtes Ergebnis garantiert. Das Programm kann scheinbar funktionieren, abstürzen oder später an ganz anderer Stelle Fehler zeigen.

Hilfreiche Gegenmaßnahmen sind klare Schnittstellen, RAII, Container der Standardbibliothek, strikte Compilerwarnungen, Unit-Tests, Code Reviews, statische Analyse, Sanitizer und einfache Architektur. Eine gute Faustregel lautet: Schreibe Code zuerst korrekt und verständlich, optimiere danach gezielt mit Messdaten.


Moderne C++-Praxis

Modern C++ bedeutet nicht, jede neue Sprachfunktion sofort zu verwenden. Es bedeutet, die Sprache so zu nutzen, dass Code sicher, lesbar, wartbar und effizient wird. Dazu gehören klare Besitzverhältnisse, möglichst wenige globale Zustände, geeignete Standardcontainer, kleine Funktionen, sprechende Namen und Tests.

  1. Standardbibliothek nutzen: Verwende bewährte Container und Algorithmen, statt grundlegende Datenstrukturen unnötig selbst zu schreiben.
  2. RAII anwenden: Binde Ressourcen an Objektlebensdauern, damit Freigaben automatisch erfolgen.
  3. Const Correctness beachten: Markiere Werte und Funktionen als const, wenn sie nichts verändern sollen.
  4. Tests schreiben: Prüfe nicht nur Einzelfälle, sondern auch Randfälle und fehlerhafte Eingaben.
  5. Debugging lernen: Nutze Compilerwarnungen, Debugger, Sanitizer und kleine reproduzierbare Beispiele.


Einsatzgebiete

C++ wird besonders häufig eingesetzt, wenn Leistung, Portabilität, kontrollierte Speicherverwaltung oder vorhandene C++-Bibliotheken wichtig sind. Beispiele sind Game Engines, Robotik, Automobilsoftware, Medizintechnik, Finanzinformatik, wissenschaftliche Simulation, Audioverarbeitung, Bildverarbeitung, Browser-Engines und Systemsoftware.

Gleichzeitig ist C++ nicht für jedes Projekt automatisch die beste Wahl. Für einfache Webanwendungen, schnelle Prototypen oder datenorientierte Skripte können Sprachen wie Python, JavaScript, Java, C# oder Go geeigneter sein. Eine gute Entwicklerentscheidung berücksichtigt Teamwissen, Anforderungen, Wartbarkeit, Sicherheit und vorhandene Werkzeuge.


Vergleich mit C

C++ ist historisch eng mit C verbunden, aber nicht einfach nur C mit Klassen. C++ besitzt ein eigenes Typsystem, eine große Standardbibliothek, Templates, Exceptions, RAII, überladbare Operatoren, Namensräume, Referenzen und viele weitere Sprachmittel. Viele C-Programme lassen sich mit Anpassungen in C++ übersetzen, doch idiomatisches C++ sieht anders aus als idiomatisches C.

Ein wichtiger Unterschied liegt im Umgang mit Ressourcen. In C werden Ressourcen häufig explizit mit Funktionen wie malloc und free verwaltet. In modernem C++ wird Ressourcenverwaltung möglichst in Objekte verlagert, sodass der Destruktor automatisch aufräumt.


Mini-Projekt: Notenstatistik

Ein gutes erstes C++-Projekt ist eine kleine Notenstatistik. Du liest mehrere Zahlen ein, speicherst sie in einem std::vector, berechnest Minimum, Maximum und Durchschnitt und gibst die Ergebnisse aus. Dabei übst Du Eingabe, Container, Schleifen, Funktionen und Fehlerbehandlung.

Mögliche Erweiterungen sind eine Sortierung der Noten, eine Ausgabe als einfache Tabelle, das Speichern in einer Datei oder eine Trennung in mehrere Dateien. So lernst Du nicht nur Syntax, sondern auch Softwareentwurf.


Lernvideo zur Einordnung

Das folgende Video eignet sich zur Vertiefung, wenn Du die Entwicklung und Ziele von modernem C++ aus Sicht der Fachcommunity einordnen möchtest.

{{#ev:youtube| https://www.youtube.com/watch?v=15QF2q66NhU |500|center}}


Zusammenfassung

C++ ist eine leistungsfähige, standardisierte und vielseitige Programmiersprache. Sie verbindet systemnahe Kontrolle mit abstrakten Sprachmitteln. Besonders wichtig sind Compiler, Datentypen, Funktionen, Klassen, Objekte, Templates, RAII, Standardbibliothek und ein sorgfältiger Umgang mit Speicher. Wer C++ lernt, lernt nicht nur eine Sprache, sondern auch viele Grundfragen der Informatik: Wie wird Code übersetzt? Wie werden Daten gespeichert? Wie entwirft man stabile Schnittstellen? Wie erreicht man Effizienz, ohne Verständlichkeit und Sicherheit zu verlieren?


Interaktive Aufgaben


Quiz: Teste Dein Wissen

Wer entwickelte C++ maßgeblich? (Bjarne Stroustrup) (!Dennis Ritchie) (!Tim Berners-Lee) (!Guido van Rossum)




Wofür ist C++ besonders bekannt? (Effiziente und systemnahe Programmierung) (!Automatische Gestaltung von Webseiten) (!Ausschließlich statistische Tabellenkalkulation) (!Nur grafische Bildbearbeitung)




Welcher Standard ist der aktuell veröffentlichte ISO-Standard von C++? (C++23 beziehungsweise ISO IEC 14882 2024) (!C++98 als einzige gültige Fassung) (!HTML5) (!Python 3)




Welche Aufgabe hat ein Compiler? (Er übersetzt Quellcode in eine maschinennahe Form) (!Er ersetzt automatisch jedes Programm durch eine Webseite) (!Er löscht alle Variablen vor dem Start) (!Er zeichnet Benutzeroberflächen ohne Code)




Was ist std::vector in C++? (Ein dynamischer Sequenzcontainer) (!Ein Betriebssystemkern) (!Ein Bildformat) (!Ein Netzwerkprotokoll)




Wofür steht RAII in der C++-Praxis? (Ressourcen werden an Objektlebensdauern gebunden) (!Alle Variablen sind automatisch global) (!Programme laufen ohne Compiler) (!Jeder Fehler wird ignoriert)




Wozu dienen Templates? (Sie ermöglichen generische Programmierung mit verschiedenen Typen) (!Sie schalten den Prozessor aus) (!Sie ersetzen jede Schleife durch eine Datei) (!Sie verhindern die Nutzung von Funktionen)




Welche Bibliothek wird für std::cout typischerweise eingebunden? (iostream) (!vector) (!thread) (!filesystem)




Was beschreibt ein Namespace? (Einen Namensbereich zur Vermeidung von Konflikten) (!Einen festen Speicherchip) (!Eine Art von Bildschirm) (!Eine Musikdatei)




Was ist undefiniertes Verhalten? (Ein Verhalten ohne garantierte Bedeutung im Sprachstandard) (!Eine besonders schnelle Sortiermethode) (!Ein offizieller Kommentarstil) (!Ein sicherer Weg zur Fehlerbehandlung)





Memory

Compiler übersetzt Quellcode
Linker verbindet Programmteile
Klasse Bauplan für Objekte
Objekt konkrete Instanz
Template Schablone für Typen
RAII Ressource an Objektlebensdauer
Vektor dynamischer Sequenzcontainer
Iterator Zugriff auf Container-Elemente





Drag and Drop

Ordne die richtigen Begriffe zu. Thema
Quellcode Text des Programms
Präprozessor Vorbereitung von Includes und Makros
Compiler Übersetzung in Objektcode
Linker Zusammenfügen zum ausführbaren Programm
Laufzeit Ausführung des Programms






Kreuzworträtsel

Stroustrup Wer entwickelte C++ maßgeblich?
Compiler Welches Werkzeug übersetzt Quellcode?
Klasse Wie heißt ein Bauplan für Objekte?
Template Wie heißt eine Vorlage für generischen Code?
Iterator Was verbindet Container und Algorithmen?
Namespace Was hilft Namenskonflikte zu vermeiden?





LearningApps


Lückentext

Vervollständige den Text.

C++ ist eine

Programmiersprache. Sie verbindet systemnahe Kontrolle mit

. Ein Compiler übersetzt Quellcode in

. Klassen ermöglichen

. Templates unterstützen

Programmierung. RAII bindet Ressourcen an die

von Objekten. Container und Algorithmen gehören zur

. Moderne C++-Programme vermeiden unnötige rohe

.




Offene Aufgaben


Leicht

  1. Hallo-Welt-Programm: Schreibe ein C++-Programm, das Deinen Namen, Dein Lernziel und eine kurze Begrüßung ausgibt.
  2. Variablen: Erstelle ein Programm, das Alter, Lieblingszahl und Lieblingsfach speichert und als ganzen Satz ausgibt.
  3. Kontrollstrukturen: Schreibe ein Programm, das prüft, ob eine eingegebene Zahl gerade oder ungerade ist.
  4. Lerntagebuch: Beschreibe in eigenen Worten, was Compiler, Linker und Laufzeit bedeuten.


Standard

  1. Funktionen: Entwickle mehrere Funktionen für einen Taschenrechner, zum Beispiel Addition, Subtraktion, Multiplikation und Division.
  2. Container: Speichere mehrere Messwerte in einem std::vector und berechne Durchschnitt, Minimum und Maximum.
  3. Klassen: Modelliere eine Klasse Buch mit Titel, Autorin oder Autor, Seitenzahl und einer Methode zur Ausgabe.
  4. Fehlerbehandlung: Ergänze ein Programm so, dass ungültige Eingaben erkannt und verständlich gemeldet werden.


Schwer

  1. Mini-Projekt: Entwickle eine kleine Notenverwaltung mit Eingabe, Speicherung, Sortierung und statistischer Auswertung.
  2. Architektur: Teile ein Programm in mehrere Dateien auf und erkläre, welche Aufgaben Headerdateien und Quelldateien übernehmen.
  3. RAII: Recherchiere ein Beispiel für Ressourcenmanagement und erkläre, warum RAII sicherer ist als manuelles Freigeben.
  4. Code Review: Analysiere ein eigenes C++-Programm nach Lesbarkeit, Fehleranfälligkeit, Speicherverwaltung und Testbarkeit.



<inputbox>

type=create break=no preload=CHAT GPT TEXT HIER EINFÜGEN default= width=30 placeholder= Dein MOOC Titel buttonlabel=MOOC erstellen </inputbox>


Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lernkontrolle

  1. Programmierentscheidung: Vergleiche C++ mit einer anderen Programmiersprache, die Du kennst. Begründe, für welche Art von Projekt Du welche Sprache wählen würdest.
  2. Fehleranalyse: Erkläre an einem selbst gewählten Beispiel, warum ein Programm trotz erfolgreicher Kompilierung falsche Ergebnisse liefern kann.
  3. Softwareentwurf: Entwirf eine kleine Anwendung und beschreibe, welche Klassen, Funktionen und Datenstrukturen Du verwenden würdest.
  4. Speicherverwaltung: Erkläre, warum automatische Ressourcenverwaltung durch RAII in großen Projekten wichtig ist.
  5. Algorithmisches Denken: Entwickle einen Algorithmus zum Sortieren oder Suchen und beschreibe, wie Du ihn mit Standardbibliotheksfunktionen vergleichen würdest.
  6. Qualitätssicherung: Plane Tests für ein C++-Programm und begründe, welche Randfälle besonders wichtig sind.


Lernnachweis

Der Lernnachweis zeigt, dass Du zentrale Zusammenhänge von C++ anwenden und reflektieren kannst. Er soll ohne externe Medien, Skripte oder Einbettungen auskommen und sich auf eigenen Code, Begründungen und nachvollziehbare Tests stützen.

  1. Projektmappe: Reiche ein kleines C++-Projekt mit Quellcode, kurzer Anleitung und Beschreibung der wichtigsten Entwurfsentscheidungen ein.
  2. Code-Kommentare: Erkläre im Code oder in einer Begleitdatei, welche Funktionen, Klassen und Datenstrukturen Du bewusst gewählt hast.
  3. Testprotokoll: Dokumentiere mindestens fünf Testfälle, darunter Normalfälle, Randfälle und fehlerhafte Eingaben.
  4. Reflexion: Beschreibe, welche C++-Konzepte Dir leicht gefallen sind und welche Risiken Du künftig besonders beachten musst.
  5. Transfer: Begründe, ob C++ für Dein gewähltes Projekt geeignet ist oder ob eine andere Programmiersprache sinnvoller wäre.




OERs zum Thema



Links


aiMOOC-Projekte





Schulfach+

Prüfungsliteratur 2026
Bundesland Bücher Kurzbeschreibung
Baden-Württemberg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Mittlere Reife

  1. Der Markisenmann - Jan Weiler oder Als die Welt uns gehörte - Liz Kessler
  2. Ein Schatten wie ein Leopard - Myron Levoy oder Pampa Blues - Rolf Lappert

Abitur Dorfrichter-Komödie über Wahrheit/Schuld; Roman über einen Ort und deutsche Geschichte. Mittlere Reife Wahllektüren (Roadtrip-Vater-Sohn / Jugendroman im NS-Kontext / Coming-of-age / Provinzroman).

Bayern

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Lustspiel über Machtmissbrauch und Recht; Roman als Zeitschnitt deutscher Geschichte an einem Haus/Grundstück.

Berlin/Brandenburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Der Biberpelz - Gerhart Hauptmann
  4. Heimsuchung - Jenny Erpenbeck

Abitur Gerichtskomödie; soziales Drama um Ausbeutung/Armut; Komödie/Satire um Diebstahl und Obrigkeit; Roman über Erinnerungsräume und Umbrüche.

Bremen

Abitur

  1. Nach Mitternacht - Irmgard Keun
  2. Mario und der Zauberer - Thomas Mann
  3. Emilia Galotti - Gotthold Ephraim Lessing oder Miss Sara Sampson - Gotthold Ephraim Lessing

Abitur Roman in der NS-Zeit (Alltag, Anpassung, Angst); Novelle über Verführung/Massenpsychologie; bürgerliche Trauerspiele (Moral, Macht, Stand).

Hamburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun

Abitur Justiz-/Machtkritik als Komödie; Großstadtroman der Weimarer Zeit (Rollenbilder, Aufstiegsträume, soziale Realität).

Hessen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Heimsuchung - Jenny Erpenbeck
  4. Der Prozess - Franz Kafka

Abitur Gerichtskomödie; Fragmentdrama über Gewalt/Entmenschlichung; Erinnerungsroman über deutsche Brüche; moderner Roman über Schuld, Macht und Bürokratie.

Niedersachsen

Abitur

  1. Der zerbrochene Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun
  3. Die Marquise von O. - Heinrich von Kleist
  4. Über das Marionettentheater - Heinrich von Kleist

Abitur Schwerpunkt auf Drama/Roman sowie Kleist-Prosatext und Essay (Ehre, Gewalt, Unschuld; Ästhetik/„Anmut“).

Nordrhein-Westfalen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Komödie über Wahrheit und Autorität; Roman als literarische „Geschichtsschichtung“ an einem Ort.

Saarland

Abitur

  1. Heimsuchung - Jenny Erpenbeck
  2. Furor - Lutz Hübner und Sarah Nemitz
  3. Bahnwärter Thiel - Gerhart Hauptmann

Abitur Erinnerungsroman an einem Ort; zeitgenössisches Drama über Eskalation/Populismus; naturalistische Novelle (Pflicht/Überforderung/Abgrund).

Sachsen (berufliches Gymnasium)

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Irrungen, Wirrungen - Theodor Fontane
  4. Der gute Mensch von Sezuan - Bertolt Brecht
  5. Heimsuchung - Jenny Erpenbeck
  6. Der Trafikant - Robert Seethaler

Abitur Mischung aus Klassiker-Drama, sozialem Drama, realistischem Roman, epischem Theater und Gegenwarts-/Erinnerungsroman; zusätzlich Coming-of-age im historischen Kontext.

Sachsen-Anhalt

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Themenfelder)

Abitur Schwerpunktsetzung über Themenfelder (u. a. Literatur um 1900; Sprache in politisch-gesellschaftlichen Kontexten), ohne feste Einzeltitel.

Schleswig-Holstein

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Recht/Gerechtigkeit und historische Tiefenschichten eines Ortes – umgesetzt über Drama und Gegenwartsroman.

Thüringen

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Orientierung am gemeinsamen Aufgabenpool)

Abitur In der Praxis häufig Orientierung am gemeinsamen Aufgabenpool; landesweite Einzeltitel je nach Vorgabe/Handreichung nicht einheitlich ausgewiesen.

Mecklenburg-Vorpommern

Abitur

  1. (Quelle aktuell technisch nicht abrufbar; Beteiligung am gemeinsamen Aufgabenpool bekannt)

Abitur Land beteiligt sich am länderübergreifenden Aufgabenpool; konkrete, veröffentlichte Einzeltitel konnten hier nicht ausgelesen werden.

Rheinland-Pfalz

Abitur

  1. (keine landesweit einheitliche Pflichtlektüre; schulische Auswahl)

Abitur Keine landesweite Einheitsliste; Auswahl kann schul-/kursbezogen erfolgen.




aiMOOCs



aiMOOC Projekte












THE MONKEY DANCE



{{#ev:youtube | https://youtu.be/rFhZlg38Zf8?si=9KdMNZYRkRD81YTo%7C 500 | center}}

The Monkey DanceaiMOOCs

  1. Trust Me It's True: #Verschwörungstheorie #FakeNews
  2. Gregor Samsa Is You: #Kafka #Verwandlung
  3. Who Owns Who: #Musk #Geld
  4. Lump: #Trump #Manipulation
  5. Filth Like You: #Konsum #Heuchelei
  6. Your Poverty Pisses Me Off: #SozialeUngerechtigkeit #Musk
  7. Hello I'm Pump: #Trump #Kapitalismus
  8. Monkey Dance Party: #Lebensfreude
  9. God Hates You Too: #Religionsfanatiker
  10. You You You: #Klimawandel #Klimaleugner
  11. Monkey Free: #Konformität #Macht #Kontrolle
  12. Pure Blood: #Rassismus
  13. Monkey World: #Chaos #Illusion #Manipulation
  14. Uh Uh Uh Poor You: #Kafka #BerichtAkademie #Doppelmoral
  15. The Monkey Dance Song: #Gesellschaftskritik
  16. Will You Be Mine: #Love
  17. Arbeitsheft
  18. And Thanks for Your Meat: #AntiFactoryFarming #AnimalRights #MeatIndustry


© The Monkey Dance on Spotify, YouTube, Amazon, MOOCit, Deezer, ...

{{#ev:youtube | https://youtu.be/Ob7etf9QuBo?si=t_NBA71bWg3Rq3LI%7C 500 | center}}



Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen

<inputbox>

type=create break=no preload=MOOCit Vorlage default= width=30 placeholder= Dein MOOC Titel buttonlabel=MOOC erstellen </inputbox>