Menu
Coddy logo textTech

Podsumowanie — kontener generyczny

Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 69 z 104.

challenge icon

Wyzwanie

Łatwy

Zbudujmy szablon klasy GenericContainer, który łączy wszystko, czego nauczyłeś się o szablonach w tym rozdziale. Utworzysz elastyczny, bezpieczny typowo kontener, który może dynamicznie przechowywać elementy i udostępniać przydatne operacje z wykorzystaniem technik szablonów.

Rozmieścisz swój kod w dwóch plikach:

  • GenericContainer.h: Zdefiniuj tutaj szablon klasy. Twój GenericContainer powinien:

    Dynamicznie przechowywać elementy, używając wskaźnika do tablicy, oraz śledzić bieżący rozmiar i pojemność.

    Udostępniać te podstawowe metody:

    • Konstruktor, który przyjmuje początkową pojemność
    • Destruktor, który prawidłowo zwalnia pamięć dynamiczną
    • push(T value): dodaje element do kontenera (na potrzeby tego wyzwania przyjmij, że pojemność jest zawsze wystarczająca)
    • get(size_t index): zwraca element o podanym indeksie
    • getSize(): zwraca bieżącą liczbę elementów

    Dodaj szablon funkcji o nazwie printContainer, który przyjmuje GenericContainer<T>& i wypisuje wszystkie elementy oddzielone spacjami, a na końcu znak nowej linii.

    Utwórz specjalizację szablonu funkcji printContainer dla GenericContainer<bool>, która wypisuje true lub false zamiast 1 lub 0.

    Dodaj wariadyczny szablon funkcji o nazwie pushAll, który przyjmuje GenericContainer<T>& i dowolną liczbę wartości, dodając każdą z nich do kontenera za pomocą wyrażenia zwijającego.

  • main.cpp: Wczytaj pięć danych wejściowych (każdą w osobnym wierszu):
    1. Pierwszą liczbę całkowitą
    2. Drugą liczbę całkowitą
    3. Trzecią liczbę całkowitą
    4. Wartość typu double
    5. Wartość logiczną jako ciąg znaków (true lub false)

    Zademonstruj działanie swojego kontenera, wykonując następujące czynności:

    1. Utwórz GenericContainer<int> o pojemności 10
    2. Użyj pushAll, aby dodać wszystkie trzy liczby całkowite jednocześnie
    3. Wypisz rozmiar: Int container size: <size>
    4. Wywołaj printContainer, aby wyświetlić liczby całkowite
    5. Utwórz GenericContainer<double> o pojemności 5
    6. Dodaj wartość typu double i literał 2.5, używając osobnych wywołań push
    7. Wywołaj printContainer, aby wyświetlić wartości typu double
    8. Utwórz GenericContainer<bool> o pojemności 5
    9. Dodaj wejściową wartość logiczną i literał false
    10. Wywołaj printContainer, aby wyświetlić wartości logiczne (powinno wyświetlić true/false)

Na przykład, dla danych wejściowych 10, 20, 30, 3.14 i true:

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

To wyzwanie łączy szablony klas użyte do utworzenia kontenera, specjalizację szablonu umożliwiającą niestandardowe wypisywanie wartości bool oraz szablony wariadyczne zapewniające elastyczność funkcji pushAll. Kontener sam zarządza własną pamięcią zgodnie z zasadami RAII, pokazując, jak szablony współdziałają z prawidłowym zarządzaniem zasobami.

Spróbuj swoich sił

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

using namespace std;

int main() {
    // Wczytaj dane wejściowe
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Przekonwertuj ciąg znaków na bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Utwórz GenericContainer<int> o pojemności 10
    
    // TODO: Użyj pushAll, aby dodać wszystkie trzy liczby całkowite naraz
    
    // TODO: Wypisz rozmiar: "Int container size: <size>"
    
    // TODO: Wywołaj printContainer, aby wyświetlić liczby całkowite
    
    // TODO: Utwórz GenericContainer<double> o pojemności 5
    
    // TODO: Dodaj wartość typu double oraz 2.5 za pomocą osobnych wywołań push
    
    // TODO: Wywołaj printContainer, aby wyświetlić wartości typu double
    
    // TODO: Utwórz GenericContainer<bool> o pojemności 5
    
    // TODO: Dodaj wejściową wartość logiczną oraz false
    
    // TODO: Wywołaj printContainer, aby wyświetlić wartości logiczne
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C++ online