<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_%28Programmiersprache%29_-_aiMOOC</id>
	<title>C++ (Programmiersprache) - aiMOOC - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_%28Programmiersprache%29_-_aiMOOC"/>
	<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=C%2B%2B_(Programmiersprache)_-_aiMOOC&amp;action=history"/>
	<updated>2026-06-14T10:12:51Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MOOCsWiki Staging</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://staging.moocwiki.org/index.php?title=C%2B%2B_(Programmiersprache)_-_aiMOOC&amp;diff=28575&amp;oldid=prev</id>
		<title>Glanz: aiMOOC über GPT aiMOOC Action erstellt</title>
		<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=C%2B%2B_(Programmiersprache)_-_aiMOOC&amp;diff=28575&amp;oldid=prev"/>
		<updated>2026-06-14T00:08:55Z</updated>

		<summary type="html">&lt;p&gt;aiMOOC über GPT aiMOOC Action erstellt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{T}}&lt;br /&gt;
{{BR}}&lt;br /&gt;
= C++ (Programmiersprache) =&lt;br /&gt;
&lt;br /&gt;
[[Datei:C++ logo.png|500px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Einleitung =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++&amp;#039;&amp;#039;&amp;#039; ist eine [[Programmiersprache|Programmiersprache]], die besonders dort eingesetzt wird, wo [[Software]] schnell, effizient, flexibel und nah an der [[Hardware]] arbeiten soll. Du findest [[C++]] in [[Betriebssystem|Betriebssystemen]], [[Treiber|Treibern]], [[Embedded Systems|eingebetteten Systemen]], [[Computerspiel|Computerspielen]], [[Simulation|Simulationen]], [[Datenbank|Datenbanken]], [[Browser|Webbrowsern]], [[Hochleistungsrechnen|Hochleistungsrechnen]] und vielen technischen Anwendungen. Gleichzeitig ist C++ eine Sprache, die mehrere [[Programmierparadigma|Programmierparadigmen]] unterstützt: [[Imperative Programmierung|imperative Programmierung]], [[Objektorientierte Programmierung|objektorientierte Programmierung]], [[Generische Programmierung|generische Programmierung]] und funktional geprägte Techniken.&lt;br /&gt;
&lt;br /&gt;
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 [[Variable|Variablen]], [[Datentyp|Datentypen]], [[Kontrollstruktur|Kontrollstrukturen]], [[Funktion|Funktionen]], [[Klasse|Klassen]], [[Objekt|Objekte]], [[Template|Templates]], [[Speicherverwaltung|Speicherverwaltung]] und die [[Standardbibliothek|Standardbibliothek]] zusammenhängen. Ziel ist nicht, jede Einzelheit der Sprache auswendig zu lernen, sondern die Denkweise moderner C++-Programmierung zu verstehen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernziele =&lt;br /&gt;
&lt;br /&gt;
Nach diesem aiMOOC kannst Du erklären, was [[C++]] von vielen anderen [[Programmiersprache|Programmiersprachen]] unterscheidet. Du kannst den Weg vom [[Quellcode|Quellcode]] zum ausführbaren Programm beschreiben, einfache C++-Programme lesen, wichtige Bestandteile wie [[Compiler|Compiler]], [[Linker|Linker]], [[Headerdatei|Headerdateien]], [[Namespace|Namespaces]], [[Klasse|Klassen]], [[Objekt|Objekte]], [[Zeiger|Zeiger]], [[Referenz|Referenzen]], [[Template|Templates]] und [[Standard Template Library|STL]] einordnen. Außerdem kannst Du bewerten, warum moderne C++-Entwicklung besonderen Wert auf [[Typsicherheit|Typsicherheit]], [[Ressourcenmanagement|Ressourcenmanagement]], [[Testen|Tests]], [[Debugging|Debugging]] und klare [[Softwarearchitektur|Softwarearchitektur]] legt.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Geschichte und Entwicklung =&lt;br /&gt;
&lt;br /&gt;
[[Datei:BjarneStroustrup.jpg|400px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
C++ wurde von [[Bjarne Stroustrup|Bjarne Stroustrup]] ab Ende der 1970er-Jahre in den [[Bell Laboratories|Bell Labs]] entwickelt. Die Sprache entstand aus dem Wunsch, die Effizienz und Systemnähe von [[C (Programmiersprache)|C]] mit stärkeren Mitteln zur Strukturierung großer Programme zu verbinden. Eine frühe Bezeichnung war &amp;#039;&amp;#039;&amp;#039;C with Classes&amp;#039;&amp;#039;&amp;#039;, weil [[Klasse|Klassen]] und [[Objektorientierte Programmierung|objektorientierte Konzepte]] zunächst im Mittelpunkt standen. Später kamen viele weitere Sprachmittel hinzu, darunter [[Template|Templates]], [[Ausnahmebehandlung|Ausnahmebehandlung]], [[Namensraum|Namensräume]], [[RAII|RAII]], [[Lambda-Ausdruck|Lambda-Ausdrücke]], [[Konzept (Programmierung)|Concepts]], [[Modul (Programmierung)|Module]] und eine umfangreiche [[Standardbibliothek|Standardbibliothek]].&lt;br /&gt;
&lt;br /&gt;
C++ wird durch einen internationalen [[Standardisierung|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 &amp;#039;&amp;#039;&amp;#039;ISO/IEC 14882:2024&amp;#039;&amp;#039;&amp;#039;. Viele Entwicklerinnen und Entwickler sprechen von &amp;#039;&amp;#039;&amp;#039;Modern C++&amp;#039;&amp;#039;&amp;#039;, wenn sie C++ ab C++11 meinen, weil seitdem viele Sprachmittel eingeführt wurden, die sichereren, klareren und ausdrucksstärkeren Code ermöglichen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Grundidee von C++ =&lt;br /&gt;
&lt;br /&gt;
C++ verbindet zwei Ziele, die auf den ersten Blick schwer zusammenpassen: Einerseits erlaubt die Sprache sehr genaue Kontrolle über [[Speicher|Speicher]], [[Laufzeit|Laufzeit]], [[Datenstruktur|Datenstrukturen]] und [[Hardware|Hardware]]. Andererseits bietet sie mächtige [[Abstraktion|Abstraktionen]], mit denen große Programme übersichtlich aufgebaut werden können. Eine zentrale Leitidee ist die &amp;#039;&amp;#039;&amp;#039;Zero-Overhead-Abstraktion&amp;#039;&amp;#039;&amp;#039;: 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.&lt;br /&gt;
&lt;br /&gt;
C++ ist daher keine reine Anfängersprache. Sie belohnt sorgfältiges Denken über [[Algorithmus|Algorithmen]], [[Datenmodell|Datenmodelle]], [[Schnittstelle|Schnittstellen]], [[Speicherverwaltung|Speicherverwaltung]] und [[Fehlerbehandlung|Fehlerbehandlung]]. Genau deshalb eignet sie sich gut, um grundlegende Konzepte der [[Informatik|Informatik]] zu verstehen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Vom Quellcode zum Programm =&lt;br /&gt;
&lt;br /&gt;
Ein C++-Programm wird in der Regel nicht direkt ausgeführt. Zuerst schreibst Du [[Quellcode|Quellcode]] in Dateien, zum Beispiel mit der Endung &amp;#039;&amp;#039;&amp;#039;.cpp&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;.hpp&amp;#039;&amp;#039;&amp;#039;. Dann verarbeitet ein [[Präprozessor|Präprozessor]] Anweisungen wie &amp;#039;&amp;#039;&amp;#039;#include&amp;#039;&amp;#039;&amp;#039;. Anschließend übersetzt ein [[Compiler|Compiler]] den Quellcode in [[Objektcode|Objektcode]]. Ein [[Linker|Linker]] verbindet mehrere Programmteile und Bibliotheken zu einem ausführbaren Programm.&lt;br /&gt;
&lt;br /&gt;
Ein sehr kleines Programm sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    std::cout &amp;amp;lt;&amp;amp;lt; &amp;quot;Hallo, C++!\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zeile &amp;#039;&amp;#039;&amp;#039;#include &amp;amp;lt;iostream&amp;amp;gt;&amp;#039;&amp;#039;&amp;#039; bindet Funktionen für Ein- und Ausgabe ein. Die Funktion &amp;#039;&amp;#039;&amp;#039;main&amp;#039;&amp;#039;&amp;#039; ist der Startpunkt vieler C++-Programme. &amp;#039;&amp;#039;&amp;#039;std::cout&amp;#039;&amp;#039;&amp;#039; schreibt Text in die Konsole. Der Rückgabewert &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; bedeutet üblicherweise, dass das Programm erfolgreich beendet wurde.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Werkzeuge =&lt;br /&gt;
&lt;br /&gt;
Für die Entwicklung brauchst Du einen [[Editor|Editor]] oder eine [[Integrierte Entwicklungsumgebung|IDE]], einen [[Compiler|Compiler]], oft ein [[Build-Management|Build-System]] und Werkzeuge für [[Versionsverwaltung|Versionsverwaltung]], [[Testen|Tests]] und [[Debugging|Fehlersuche]]. Häufig genutzte Compiler sind &amp;#039;&amp;#039;&amp;#039;GCC&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Clang&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;Microsoft Visual C++&amp;#039;&amp;#039;&amp;#039;. Ein einfaches Kompilieren auf der Kommandozeile kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
g++ -std=c++23 -Wall -Wextra -pedantic main.cpp -o programm&lt;br /&gt;
./programm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Option &amp;#039;&amp;#039;&amp;#039;-std=c++23&amp;#039;&amp;#039;&amp;#039; wählt eine Sprachfassung. Die Warnoptionen &amp;#039;&amp;#039;&amp;#039;-Wall&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;-Wextra&amp;#039;&amp;#039;&amp;#039; helfen Dir, mögliche Fehler früh zu erkennen. In professionellen Projekten werden zusätzlich [[CMake|CMake]], [[Continuous Integration|Continuous Integration]], [[Unit-Test|Unit-Tests]], [[Profiler|Profiler]] und [[Static Code Analysis|statische Codeanalyse]] eingesetzt.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|   https://www.youtube.com/watch?v=NReDubvNjRg   |500|center}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Datentypen, Variablen und Ausdrücke =&lt;br /&gt;
&lt;br /&gt;
In C++ hat jeder [[Ausdruck (Programmierung)|Ausdruck]] einen [[Datentyp|Datentyp]]. Beispiele sind &amp;#039;&amp;#039;&amp;#039;int&amp;#039;&amp;#039;&amp;#039; für ganze Zahlen, &amp;#039;&amp;#039;&amp;#039;double&amp;#039;&amp;#039;&amp;#039; für Gleitkommazahlen, &amp;#039;&amp;#039;&amp;#039;bool&amp;#039;&amp;#039;&amp;#039; für Wahrheitswerte und &amp;#039;&amp;#039;&amp;#039;char&amp;#039;&amp;#039;&amp;#039; für Zeichen. Mit der [[Standardbibliothek|Standardbibliothek]] kommen viele weitere Typen hinzu, zum Beispiel &amp;#039;&amp;#039;&amp;#039;std::string&amp;#039;&amp;#039;&amp;#039; für Zeichenketten und &amp;#039;&amp;#039;&amp;#039;std::vector&amp;#039;&amp;#039;&amp;#039; für dynamische Folgen von Elementen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int alter = 16;&lt;br /&gt;
    double temperatur = 21.5;&lt;br /&gt;
    bool bestanden = true;&lt;br /&gt;
    std::string name = &amp;quot;Ada&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;amp;lt;&amp;amp;lt; name &amp;amp;lt;&amp;amp;lt; &amp;quot; ist &amp;quot; &amp;amp;lt;&amp;amp;lt; alter &amp;amp;lt;&amp;amp;lt; &amp;quot; Jahre alt.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C++ ist statisch typisiert. Das bedeutet, dass viele Typfehler bereits beim [[Kompilierung|Kompilieren]] entdeckt werden können. Mit &amp;#039;&amp;#039;&amp;#039;auto&amp;#039;&amp;#039;&amp;#039; kann der Compiler den Typ aus dem Zusammenhang ableiten. Das ist praktisch, sollte aber so eingesetzt werden, dass der Code verständlich bleibt.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Kontrollstrukturen =&lt;br /&gt;
&lt;br /&gt;
Mit [[Kontrollstruktur|Kontrollstrukturen]] entscheidest Du, welche Anweisungen ausgeführt werden. Zu den wichtigsten gehören &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;else&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;switch&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;while&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;do while&amp;#039;&amp;#039;&amp;#039;. Sie bilden die Grundlage für [[Algorithmus|Algorithmen]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int zahl = 7;&lt;br /&gt;
&lt;br /&gt;
    if (zahl % 2 == 0) {&lt;br /&gt;
        std::cout &amp;amp;lt;&amp;amp;lt; &amp;quot;gerade\n&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        std::cout &amp;amp;lt;&amp;amp;lt; &amp;quot;ungerade\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for (int i = 1; i &amp;amp;lt;= 5; ++i) {&lt;br /&gt;
        std::cout &amp;amp;lt;&amp;amp;lt; i &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achte bei [[Schleife (Programmierung)|Schleifen]] immer darauf, dass die Abbruchbedingung erreichbar ist. Endlosschleifen können sinnvoll sein, etwa in [[Echtzeitsystem|Echtzeitsystemen]], sind aber häufig ein Zeichen für einen Fehler.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Funktionen und Schnittstellen =&lt;br /&gt;
&lt;br /&gt;
[[Funktion|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|Referenz]] oder per Zeiger übergeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int quadrat(int x) {&lt;br /&gt;
    return x * x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void begruesse(const std::string&amp;amp;amp; name) {&lt;br /&gt;
    std::cout &amp;amp;lt;&amp;amp;lt; &amp;quot;Hallo, &amp;quot; &amp;amp;lt;&amp;amp;lt; name &amp;amp;lt;&amp;amp;lt; &amp;quot;!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;const&amp;#039;&amp;#039;&amp;#039; bedeutet, dass ein Wert nicht verändert werden soll. Die Kombination &amp;#039;&amp;#039;&amp;#039;const std::string&amp;amp;amp;&amp;#039;&amp;#039;&amp;#039; ü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.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Objektorientierte Programmierung =&lt;br /&gt;
&lt;br /&gt;
[[Objektorientierte Programmierung|Objektorientierte Programmierung]] ordnet Daten und Verhalten in [[Klasse|Klassen]] und [[Objekt|Objekten]]. Eine Klasse ist ein Bauplan. Ein Objekt ist eine konkrete Instanz dieses Bauplans. C++ unterstützt [[Kapselung|Kapselung]], [[Vererbung (Programmierung)|Vererbung]] und [[Polymorphie|Polymorphie]]. Moderne C++-Entwicklung nutzt Vererbung jedoch gezielt und bevorzugt oft klare Schnittstellen, einfache Werttypen und Komposition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Konto {&lt;br /&gt;
private:&lt;br /&gt;
    std::string inhaber;&lt;br /&gt;
    double saldo;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    Konto(std::string name, double start)&lt;br /&gt;
        : inhaber{name}, saldo{start} {}&lt;br /&gt;
&lt;br /&gt;
    void einzahlen(double betrag) {&lt;br /&gt;
        if (betrag &amp;amp;gt; 0) {&lt;br /&gt;
            saldo += betrag;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    double kontostand() const {&lt;br /&gt;
        return saldo;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    Konto k{&amp;quot;Mina&amp;quot;, 100.0};&lt;br /&gt;
    k.einzahlen(25.0);&lt;br /&gt;
    std::cout &amp;amp;lt;&amp;amp;lt; k.kontostand() &amp;amp;lt;&amp;amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die privaten Daten einer Klasse sind von außen nicht direkt zugänglich. Dadurch entsteht [[Kapselung|Kapselung]]: Die Klasse kontrolliert selbst, wie ihr Zustand verändert wird. Das verbessert Wartbarkeit und schützt vor ungültigen Zuständen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Speicher, Zeiger und Referenzen =&lt;br /&gt;
&lt;br /&gt;
C++ erlaubt eine sehr genaue Kontrolle über [[Speicherverwaltung|Speicherverwaltung]]. Das ist mächtig, kann aber fehleranfällig sein. Ein [[Zeiger|Zeiger]] speichert eine Speicheradresse. Eine [[Referenz|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.&lt;br /&gt;
&lt;br /&gt;
Moderne C++-Programme vermeiden unnötige rohe Zeiger für Besitzverhältnisse. Stattdessen werden [[RAII|RAII]] und [[Smart Pointer|Smart Pointer]] genutzt. &amp;#039;&amp;#039;&amp;#039;RAII&amp;#039;&amp;#039;&amp;#039; steht für &amp;#039;&amp;#039;&amp;#039;Resource Acquisition Is Initialization&amp;#039;&amp;#039;&amp;#039;. Die Grundidee lautet: Eine Ressource wird an die Lebensdauer eines Objekts gebunden. Wenn das Objekt zerstört wird, wird die Ressource automatisch freigegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;memory&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Sensor {&lt;br /&gt;
    void messen() {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    auto sensor = std::make_unique&amp;amp;lt;Sensor&amp;amp;gt;();&lt;br /&gt;
    sensor-&amp;amp;gt;messen();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;std::unique_ptr&amp;#039;&amp;#039;&amp;#039; drückt aus, dass genau ein Objekt für eine Ressource verantwortlich ist. Das ist klarer und sicherer als manuelles &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039;. In gutem modernem C++ kommen direkte Speicherfreigaben im Anwendungscode selten vor.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Standardbibliothek und STL =&lt;br /&gt;
&lt;br /&gt;
Die [[C++-Standardbibliothek|C++-Standardbibliothek]] bietet viele Bausteine, die Du nicht selbst neu erfinden musst. Besonders wichtig sind [[Container (Informatik)|Container]], [[Iterator|Iteratoren]], [[Algorithmus|Algorithmen]], [[Zeichenkette|Zeichenketten]], [[Ein-/Ausgabe|Ein- und Ausgabe]], [[Zeitmessung|Zeitfunktionen]], [[Thread (Informatik)|Threads]], [[Dateisystem|Dateisystemzugriff]] und Hilfstypen.&lt;br /&gt;
&lt;br /&gt;
Ein klassisches Beispiel ist die Zusammenarbeit von &amp;#039;&amp;#039;&amp;#039;std::vector&amp;#039;&amp;#039;&amp;#039;, Iteratoren und &amp;#039;&amp;#039;&amp;#039;std::sort&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;algorithm&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;vector&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    std::vector&amp;amp;lt;int&amp;amp;gt; zahlen {4, 1, 3, 2};&lt;br /&gt;
    std::sort(zahlen.begin(), zahlen.end());&lt;br /&gt;
&lt;br /&gt;
    for (int zahl : zahlen) {&lt;br /&gt;
        std::cout &amp;amp;lt;&amp;amp;lt; zahl &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;std::vector&amp;#039;&amp;#039;&amp;#039; ist ein dynamischer Sequenzcontainer. &amp;#039;&amp;#039;&amp;#039;std::sort&amp;#039;&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Templates und generische Programmierung =&lt;br /&gt;
&lt;br /&gt;
[[Template|Templates]] ermöglichen [[Generische Programmierung|generische Programmierung]]. Du kannst Funktionen und Klassen so formulieren, dass sie für verschiedene Typen funktionieren. Dadurch lassen sich wiederverwendbare Bibliotheken entwickeln.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template &amp;amp;lt;typename T&amp;amp;gt;&lt;br /&gt;
T maximum(T a, T b) {&lt;br /&gt;
    return (a &amp;amp;lt; b) ? b : a;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Funktion &amp;#039;&amp;#039;&amp;#039;maximum&amp;#039;&amp;#039;&amp;#039; kann für verschiedene Typen verwendet werden, sofern diese Typen mit dem Operator &amp;#039;&amp;#039;&amp;#039;&amp;amp;lt;&amp;#039;&amp;#039;&amp;#039; vergleichbar sind. Seit C++20 können [[Konzept (Programmierung)|Concepts]] solche Anforderungen genauer ausdrücken. Das verbessert Fehlermeldungen und macht Schnittstellen verständlicher.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Fehlerbehandlung =&lt;br /&gt;
&lt;br /&gt;
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 [[Ausnahmebehandlung|Exceptions]]. Außerdem werden in modernem C++ häufig Typen wie &amp;#039;&amp;#039;&amp;#039;std::optional&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;std::expected&amp;#039;&amp;#039;&amp;#039; genutzt, um fehlende Werte oder erwartbare Fehler explizit darzustellen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, zwischen Programmierfehlern und Laufzeitproblemen zu unterscheiden. Ein ungültiger Index in einem [[Array|Array]] ist oft ein Programmierfehler. Eine nicht vorhandene Datei ist ein erwartbares Laufzeitproblem. Gute C++-Programme machen solche Unterschiede sichtbar.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Sicherheit und typische Fehlerquellen =&lt;br /&gt;
&lt;br /&gt;
C++ gibt Dir viel Freiheit. Freiheit bedeutet aber Verantwortung. Typische Fehlerquellen sind nicht initialisierte Variablen, ungültige Zeiger, Datenrennen in [[Nebenläufigkeit|nebenläufigen Programmen]], Zugriff außerhalb von Arraygrenzen, falsche Besitzverhältnisse und [[Undefiniertes Verhalten|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.&lt;br /&gt;
&lt;br /&gt;
Hilfreiche Gegenmaßnahmen sind klare [[Schnittstelle|Schnittstellen]], [[RAII|RAII]], Container der Standardbibliothek, strikte Compilerwarnungen, [[Unit-Test|Unit-Tests]], [[Code Review|Code Reviews]], statische Analyse, Sanitizer und einfache Architektur. Eine gute Faustregel lautet: Schreibe Code zuerst korrekt und verständlich, optimiere danach gezielt mit Messdaten.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Moderne C++-Praxis =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Modern C++&amp;#039;&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
# [[Standardbibliothek|Standardbibliothek]] nutzen: Verwende bewährte Container und Algorithmen, statt grundlegende Datenstrukturen unnötig selbst zu schreiben.&lt;br /&gt;
# [[RAII|RAII]] anwenden: Binde Ressourcen an Objektlebensdauern, damit Freigaben automatisch erfolgen.&lt;br /&gt;
# [[Const Correctness|Const Correctness]] beachten: Markiere Werte und Funktionen als &amp;#039;&amp;#039;&amp;#039;const&amp;#039;&amp;#039;&amp;#039;, wenn sie nichts verändern sollen.&lt;br /&gt;
# [[Testen|Tests]] schreiben: Prüfe nicht nur Einzelfälle, sondern auch Randfälle und fehlerhafte Eingaben.&lt;br /&gt;
# [[Debugging|Debugging]] lernen: Nutze Compilerwarnungen, Debugger, Sanitizer und kleine reproduzierbare Beispiele.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Einsatzgebiete =&lt;br /&gt;
&lt;br /&gt;
C++ wird besonders häufig eingesetzt, wenn [[Performance|Leistung]], [[Portabilität|Portabilität]], kontrollierte [[Speicherverwaltung|Speicherverwaltung]] oder vorhandene C++-Bibliotheken wichtig sind. Beispiele sind [[Game Engine|Game Engines]], [[Robotik|Robotik]], [[Automobilsoftware|Automobilsoftware]], [[Medizintechnik|Medizintechnik]], [[Finanzinformatik|Finanzinformatik]], [[Simulation|wissenschaftliche Simulation]], [[Audioverarbeitung|Audioverarbeitung]], [[Bildverarbeitung|Bildverarbeitung]], [[Browser Engine|Browser-Engines]] und [[Systemsoftware|Systemsoftware]].&lt;br /&gt;
&lt;br /&gt;
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 (Programmiersprache)|Python]], [[JavaScript|JavaScript]], [[Java (Programmiersprache)|Java]], [[C-Sharp|C#]] oder [[Go (Programmiersprache)|Go]] geeigneter sein. Eine gute Entwicklerentscheidung berücksichtigt Teamwissen, Anforderungen, Wartbarkeit, Sicherheit und vorhandene Werkzeuge.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Vergleich mit C =&lt;br /&gt;
&lt;br /&gt;
C++ ist historisch eng mit [[C (Programmiersprache)|C]] verbunden, aber nicht einfach nur &amp;#039;&amp;#039;&amp;#039;C mit Klassen&amp;#039;&amp;#039;&amp;#039;. 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.&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Unterschied liegt im Umgang mit Ressourcen. In C werden Ressourcen häufig explizit mit Funktionen wie &amp;#039;&amp;#039;&amp;#039;malloc&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;free&amp;#039;&amp;#039;&amp;#039; verwaltet. In modernem C++ wird Ressourcenverwaltung möglichst in Objekte verlagert, sodass der [[Destruktor|Destruktor]] automatisch aufräumt.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Mini-Projekt: Notenstatistik =&lt;br /&gt;
&lt;br /&gt;
Ein gutes erstes C++-Projekt ist eine kleine [[Statistik|Notenstatistik]]. Du liest mehrere Zahlen ein, speicherst sie in einem &amp;#039;&amp;#039;&amp;#039;std::vector&amp;#039;&amp;#039;&amp;#039;, berechnest Minimum, Maximum und Durchschnitt und gibst die Ergebnisse aus. Dabei übst Du Eingabe, Container, Schleifen, Funktionen und Fehlerbehandlung.&lt;br /&gt;
&lt;br /&gt;
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|Softwareentwurf]].&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernvideo zur Einordnung =&lt;br /&gt;
&lt;br /&gt;
Das folgende Video eignet sich zur Vertiefung, wenn Du die Entwicklung und Ziele von modernem C++ aus Sicht der Fachcommunity einordnen möchtest.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|   https://www.youtube.com/watch?v=15QF2q66NhU   |500|center}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
&lt;br /&gt;
C++ ist eine leistungsfähige, standardisierte und vielseitige [[Programmiersprache|Programmiersprache]]. Sie verbindet systemnahe Kontrolle mit abstrakten Sprachmitteln. Besonders wichtig sind [[Compiler|Compiler]], [[Datentyp|Datentypen]], [[Funktion|Funktionen]], [[Klasse|Klassen]], [[Objekt|Objekte]], [[Template|Templates]], [[RAII|RAII]], [[Standardbibliothek|Standardbibliothek]] und ein sorgfältiger Umgang mit [[Speicherverwaltung|Speicher]]. Wer C++ lernt, lernt nicht nur eine Sprache, sondern auch viele Grundfragen der [[Informatik|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?&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Interaktive Aufgaben =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Quiz: Teste Dein Wissen ==&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wer entwickelte C++ maßgeblich?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Bjarne Stroustrup)&lt;br /&gt;
(!Dennis Ritchie)&lt;br /&gt;
(!Tim Berners-Lee)&lt;br /&gt;
(!Guido van Rossum)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wofür ist C++ besonders bekannt?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Effiziente und systemnahe Programmierung)&lt;br /&gt;
(!Automatische Gestaltung von Webseiten)&lt;br /&gt;
(!Ausschließlich statistische Tabellenkalkulation)&lt;br /&gt;
(!Nur grafische Bildbearbeitung)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welcher Standard ist der aktuell veröffentlichte ISO-Standard von C++?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(C++23 beziehungsweise ISO IEC 14882 2024)&lt;br /&gt;
(!C++98 als einzige gültige Fassung)&lt;br /&gt;
(!HTML5)&lt;br /&gt;
(!Python 3)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Aufgabe hat ein Compiler?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Er übersetzt Quellcode in eine maschinennahe Form)&lt;br /&gt;
(!Er ersetzt automatisch jedes Programm durch eine Webseite)&lt;br /&gt;
(!Er löscht alle Variablen vor dem Start)&lt;br /&gt;
(!Er zeichnet Benutzeroberflächen ohne Code)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was ist std::vector in C++?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Ein dynamischer Sequenzcontainer)&lt;br /&gt;
(!Ein Betriebssystemkern)&lt;br /&gt;
(!Ein Bildformat)&lt;br /&gt;
(!Ein Netzwerkprotokoll)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wofür steht RAII in der C++-Praxis?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Ressourcen werden an Objektlebensdauern gebunden)&lt;br /&gt;
(!Alle Variablen sind automatisch global)&lt;br /&gt;
(!Programme laufen ohne Compiler)&lt;br /&gt;
(!Jeder Fehler wird ignoriert)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wozu dienen Templates?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Sie ermöglichen generische Programmierung mit verschiedenen Typen)&lt;br /&gt;
(!Sie schalten den Prozessor aus)&lt;br /&gt;
(!Sie ersetzen jede Schleife durch eine Datei)&lt;br /&gt;
(!Sie verhindern die Nutzung von Funktionen)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Bibliothek wird für std::cout typischerweise eingebunden?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(iostream)&lt;br /&gt;
(!vector)&lt;br /&gt;
(!thread)&lt;br /&gt;
(!filesystem)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was beschreibt ein Namespace?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Einen Namensbereich zur Vermeidung von Konflikten)&lt;br /&gt;
(!Einen festen Speicherchip)&lt;br /&gt;
(!Eine Art von Bildschirm)&lt;br /&gt;
(!Eine Musikdatei)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was ist undefiniertes Verhalten?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Ein Verhalten ohne garantierte Bedeutung im Sprachstandard)&lt;br /&gt;
(!Eine besonders schnelle Sortiermethode)&lt;br /&gt;
(!Ein offizieller Kommentarstil)&lt;br /&gt;
(!Ein sicherer Weg zur Fehlerbehandlung)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;memo-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Compiler || übersetzt Quellcode&lt;br /&gt;
|-&lt;br /&gt;
| Linker || verbindet Programmteile&lt;br /&gt;
|-&lt;br /&gt;
| Klasse || Bauplan für Objekte&lt;br /&gt;
|-&lt;br /&gt;
| Objekt || konkrete Instanz&lt;br /&gt;
|-&lt;br /&gt;
| Template || Schablone für Typen&lt;br /&gt;
|-&lt;br /&gt;
| RAII || Ressource an Objektlebensdauer&lt;br /&gt;
|-&lt;br /&gt;
| Vektor || dynamischer Sequenzcontainer&lt;br /&gt;
|-&lt;br /&gt;
| Iterator || Zugriff auf Container-Elemente&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drag and Drop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;lueckentext-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Ordne die richtigen Begriffe zu.&lt;br /&gt;
! Thema&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quellcode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Text des Programms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Präprozessor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Vorbereitung von Includes und Makros&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Compiler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Übersetzung in Objektcode&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Linker&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Zusammenfügen zum ausführbaren Programm&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Laufzeit&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Ausführung des Programms&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Kreuzworträtsel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;kreuzwort-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Stroustrup || Wer entwickelte C++ maßgeblich?&lt;br /&gt;
|-&lt;br /&gt;
| Compiler || Welches Werkzeug übersetzt Quellcode?&lt;br /&gt;
|-&lt;br /&gt;
| Klasse || Wie heißt ein Bauplan für Objekte?&lt;br /&gt;
|-&lt;br /&gt;
| Template || Wie heißt eine Vorlage für generischen Code?&lt;br /&gt;
|-&lt;br /&gt;
| Iterator || Was verbindet Container und Algorithmen?&lt;br /&gt;
|-&lt;br /&gt;
| Namespace || Was hilft Namenskonflikte zu vermeiden?&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== LearningApps ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://learningapps.org/index.php?s=C%2B%2B+Programmiersprache &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Lückentext ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;quiz display=simple&amp;gt;&lt;br /&gt;
{&amp;#039;&amp;#039;&amp;#039;Vervollständige den Text.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
|type=&amp;quot;{}&amp;quot;}&lt;br /&gt;
C++ ist eine { kompilierte } Programmiersprache. Sie verbindet systemnahe Kontrolle mit { Abstraktion }. Ein Compiler übersetzt Quellcode in { Maschinencode }. Klassen ermöglichen { Kapselung }. Templates unterstützen { generische } Programmierung. RAII bindet Ressourcen an die { Lebensdauer } von Objekten. Container und Algorithmen gehören zur { Standardbibliothek }. Moderne C++-Programme vermeiden unnötige rohe { Zeiger }.&lt;br /&gt;
&amp;lt;/quiz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Offene Aufgaben =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Leicht ===&lt;br /&gt;
# [[Hallo-Welt-Programm|Hallo-Welt-Programm]]: Schreibe ein C++-Programm, das Deinen Namen, Dein Lernziel und eine kurze Begrüßung ausgibt.&lt;br /&gt;
# [[Variable|Variablen]]: Erstelle ein Programm, das Alter, Lieblingszahl und Lieblingsfach speichert und als ganzen Satz ausgibt.&lt;br /&gt;
# [[Kontrollstruktur|Kontrollstrukturen]]: Schreibe ein Programm, das prüft, ob eine eingegebene Zahl gerade oder ungerade ist.&lt;br /&gt;
# [[Dokumentation|Lerntagebuch]]: Beschreibe in eigenen Worten, was Compiler, Linker und Laufzeit bedeuten.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Standard ===&lt;br /&gt;
# [[Funktion|Funktionen]]: Entwickle mehrere Funktionen für einen Taschenrechner, zum Beispiel Addition, Subtraktion, Multiplikation und Division.&lt;br /&gt;
# [[Container (Informatik)|Container]]: Speichere mehrere Messwerte in einem &amp;#039;&amp;#039;&amp;#039;std::vector&amp;#039;&amp;#039;&amp;#039; und berechne Durchschnitt, Minimum und Maximum.&lt;br /&gt;
# [[Klasse|Klassen]]: Modelliere eine Klasse &amp;#039;&amp;#039;&amp;#039;Buch&amp;#039;&amp;#039;&amp;#039; mit Titel, Autorin oder Autor, Seitenzahl und einer Methode zur Ausgabe.&lt;br /&gt;
# [[Fehlerbehandlung|Fehlerbehandlung]]: Ergänze ein Programm so, dass ungültige Eingaben erkannt und verständlich gemeldet werden.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Schwer ===&lt;br /&gt;
# [[Projektarbeit|Mini-Projekt]]: Entwickle eine kleine Notenverwaltung mit Eingabe, Speicherung, Sortierung und statistischer Auswertung.&lt;br /&gt;
# [[Softwarearchitektur|Architektur]]: Teile ein Programm in mehrere Dateien auf und erkläre, welche Aufgaben Headerdateien und Quelldateien übernehmen.&lt;br /&gt;
# [[RAII|RAII]]: Recherchiere ein Beispiel für Ressourcenmanagement und erkläre, warum RAII sicherer ist als manuelles Freigeben.&lt;br /&gt;
# [[Code Review|Code Review]]: Analysiere ein eigenes C++-Programm nach Lesbarkeit, Fehleranfälligkeit, Speicherverwaltung und Testbarkeit.&lt;br /&gt;
&lt;br /&gt;
{{:Offene Aufgabe - MOOC erstellen}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernkontrolle =&lt;br /&gt;
&lt;br /&gt;
# [[Transferaufgabe|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.&lt;br /&gt;
# [[Fehleranalyse|Fehleranalyse]]: Erkläre an einem selbst gewählten Beispiel, warum ein Programm trotz erfolgreicher Kompilierung falsche Ergebnisse liefern kann.&lt;br /&gt;
# [[Softwareentwurf|Softwareentwurf]]: Entwirf eine kleine Anwendung und beschreibe, welche Klassen, Funktionen und Datenstrukturen Du verwenden würdest.&lt;br /&gt;
# [[Speicherverwaltung|Speicherverwaltung]]: Erkläre, warum automatische Ressourcenverwaltung durch RAII in großen Projekten wichtig ist.&lt;br /&gt;
# [[Algorithmus|Algorithmisches Denken]]: Entwickle einen Algorithmus zum Sortieren oder Suchen und beschreibe, wie Du ihn mit Standardbibliotheksfunktionen vergleichen würdest.&lt;br /&gt;
# [[Qualitätssicherung|Qualitätssicherung]]: Plane Tests für ein C++-Programm und begründe, welche Randfälle besonders wichtig sind.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernnachweis =&lt;br /&gt;
&lt;br /&gt;
Der [[Lernnachweis|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.&lt;br /&gt;
&lt;br /&gt;
# [[Projektmappe|Projektmappe]]: Reiche ein kleines C++-Projekt mit Quellcode, kurzer Anleitung und Beschreibung der wichtigsten Entwurfsentscheidungen ein.&lt;br /&gt;
# [[Code-Kommentar|Code-Kommentare]]: Erkläre im Code oder in einer Begleitdatei, welche Funktionen, Klassen und Datenstrukturen Du bewusst gewählt hast.&lt;br /&gt;
# [[Testprotokoll|Testprotokoll]]: Dokumentiere mindestens fünf Testfälle, darunter Normalfälle, Randfälle und fehlerhafte Eingaben.&lt;br /&gt;
# [[Reflexion|Reflexion]]: Beschreibe, welche C++-Konzepte Dir leicht gefallen sind und welche Risiken Du künftig besonders beachten musst.&lt;br /&gt;
# [[Transfer|Transfer]]: Begründe, ob C++ für Dein gewähltes Projekt geeignet ist oder ob eine andere Programmiersprache sinnvoller wäre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= OERs zum Thema =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://de.m.wikipedia.org/wiki/C%2B%2B &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
{{:D-Tab}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[C++ (Programmiersprache)|C++]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Programmiersprache]]&lt;br /&gt;
# [[Compiler]]&lt;br /&gt;
# [[Linker]]&lt;br /&gt;
# [[Objektorientierte Programmierung]]&lt;br /&gt;
# [[Generische Programmierung]]&lt;br /&gt;
# [[Template]]&lt;br /&gt;
# [[Klasse]]&lt;br /&gt;
# [[Objekt]]&lt;br /&gt;
# [[Zeiger]]&lt;br /&gt;
# [[Referenz]]&lt;br /&gt;
# [[RAII]]&lt;br /&gt;
# [[Standard Template Library]]&lt;br /&gt;
# [[Datenstruktur]]&lt;br /&gt;
# [[Algorithmus]]&lt;br /&gt;
# [[Softwareentwicklung]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;br /&gt;
[[Kategorie:C++]]&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Berufliche Bildung]]&lt;br /&gt;
[[Kategorie:Sekundarstufe II]]&lt;br /&gt;
[[Kategorie:Studium]]&lt;br /&gt;
[[Kategorie:Klasse 10-13]]&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= aiMOOC-Projekte =&lt;br /&gt;
[[Kategorie:AI_MOOC]] [[Kategorie:GPT aiMOOC]]&lt;br /&gt;
{{MT}}&lt;/div&gt;</summary>
		<author><name>Glanz</name></author>
	</entry>
</feed>