Menu
CoddyTech

Rückblick – Generischer Container

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 69 von 104.

challenge icon

Aufgabe

Einfach

Lass uns eine Klassenvorlage GenericContainer erstellen, die alles zusammenführt, was du in diesem Kapitel über Vorlagen gelernt hast. Du erstellst einen flexiblen, typsicheren Container, der Elemente dynamisch speichern und mithilfe von Vorlagentechniken nützliche Operationen bereitstellen kann.

Du verteilst deinen Code auf zwei Dateien:

  • GenericContainer.h: Definiere hier deine Klassenvorlage. Dein GenericContainer sollte:

    Elemente dynamisch mithilfe eines Zeigers auf ein Array speichern und dabei die aktuelle Größe und Kapazität nachverfolgen.

    Diese grundlegenden Methoden bereitstellen:

    • Einen Konstruktor, der eine Anfangskapazität entgegennimmt
    • Einen Destruktor, der den dynamischen Speicher ordnungsgemäß freigibt
    • push(T value): Fügt dem Container ein Element hinzu (für diese Herausforderung kannst du davon ausgehen, dass die Kapazität immer ausreicht)
    • get(size_t index): Gibt das Element am angegebenen Index zurück
    • getSize(): Gibt die aktuelle Anzahl der Elemente zurück

    Füge eine Funktionsvorlage namens printContainer hinzu, die ein GenericContainer<T>& entgegennimmt und alle Elemente durch Leerzeichen getrennt, gefolgt von einem Zeilenumbruch, ausgibt.

    Erstelle eine Spezialisierung der Vorlage printContainer für GenericContainer<bool>, die true oder false statt 1 oder 0 ausgibt.

    Füge eine variadische Funktionsvorlage namens pushAll hinzu, die ein GenericContainer<T>& und eine beliebige Anzahl von Werten entgegennimmt und jeden Wert mithilfe eines Faltungsausdrucks in den Container einfügt. Eine Faltung über den Kommaoperator, etwa (container.push(args), ...);, führt den Aufruf einmal pro Argument aus.

  • main.cpp: Lies fünf Eingaben (jeweils in einer eigenen Zeile):
    1. Erste Ganzzahl
    2. Zweite Ganzzahl
    3. Dritte Ganzzahl
    4. Ein Wert vom Typ double
    5. Ein boolescher Wert als Zeichenfolge (true oder false)

    Führe deinen Container anhand folgender Schritte vor:

    1. Erstelle einen GenericContainer<int> mit der Kapazität 10
    2. Verwende pushAll, um alle drei Ganzzahlen auf einmal hinzuzufügen
    3. Gib die Größe aus: Int container size: <size>
    4. Rufe printContainer auf, um die Ganzzahlen auszugeben
    5. Erstelle einen GenericContainer<double> mit der Kapazität 5
    6. Füge den Wert vom Typ double und das Literal 2.5 mit einzelnen Aufrufen von push hinzu
    7. Rufe printContainer auf, um die Werte vom Typ double auszugeben
    8. Erstelle einen GenericContainer<bool> mit der Kapazität 5
    9. Füge die boolesche Eingabe und das Literal false hinzu
    10. Rufe printContainer auf, um die booleschen Werte auszugeben (sollte true/false anzeigen)

Zum Beispiel bei den Eingaben 10, 20, 30, 3.14 und true:

Int container size: 3
10 20 30 
3.14 2.5 
true false 

Diese Herausforderung vereint Klassenvorlagen für den Container, eine Vorlagenspezialisierung für die benutzerdefinierte Ausgabe von booleschen Werten und variadische Vorlagen für die flexible Funktion pushAll. Dein Container verwaltet seinen eigenen Speicher gemäß den RAII-Prinzipien und zeigt, wie Vorlagen mit einer ordnungsgemäßen Ressourcenverwaltung zusammenspielen.

Probier es selbst

#include <iostream>
#include <string>
#include "GenericContainer.h"

using namespace std;

int main() {
    // Eingaben einlesen
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Zeichenkette in bool umwandeln
    bool boolVal = (boolStr == "true");
    
    // TODO: GenericContainer<int> mit Kapazität 10 erstellen
    
    // TODO: Mit pushAll alle drei Ganzzahlen auf einmal hinzufügen
    
    // TODO: Die Größe ausgeben: "Int container size: <size>"
    
    // TODO: printContainer aufrufen, um die Ganzzahlen anzuzeigen
    
    // TODO: GenericContainer<double> mit Kapazität 5 erstellen
    
    // TODO: Den double-Wert und 2.5 mit einzelnen push-Aufrufen hinzufügen
    
    // TODO: printContainer aufrufen, um die double-Werte anzuzeigen
    
    // TODO: GenericContainer<bool> mit Kapazität 5 erstellen
    
    // TODO: Die bool-Eingabe und false hinzufügen
    
    // TODO: printContainer aufrufen, um die bool-Werte anzuzeigen
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler