Menu
CoddyTech

Rangkuman, Container Generik

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 69 dari 104.

challenge icon

Tantangan

Mudah

Mari kita buat template class GenericContainer yang menggabungkan semua hal yang telah kamu pelajari tentang template di bab ini. Kamu akan membuat container yang fleksibel dan aman terhadap tipe data, yang dapat menyimpan elemen secara dinamis dan menyediakan operasi berguna melalui teknik template.

Kamu akan membagi kodemu ke dalam dua file:

  • GenericContainer.h: Definisikan template class-mu di sini. GenericContainer harus:

    Menyimpan elemen secara dinamis menggunakan pointer ke array, sekaligus melacak ukuran saat ini dan kapasitasnya.

    Menyediakan method inti berikut:

    • Konstruktor yang menerima kapasitas awal
    • Destruktor yang membersihkan memori dinamis dengan benar
    • push(T value): menambahkan elemen ke container (anggap kapasitas selalu cukup untuk tantangan ini)
    • get(size_t index): mengembalikan elemen pada indeks yang diberikan
    • getSize(): mengembalikan jumlah elemen saat ini

    Tambahkan template fungsi bernama printContainer yang menerima GenericContainer<T>& dan mencetak semua elemen yang dipisahkan spasi, lalu diikuti baris baru.

    Buat spesialisasi template untuk printContainer bagi GenericContainer<bool> yang mencetak true atau false, bukan 1 atau 0.

    Tambahkan template fungsi variadik bernama pushAll yang menerima GenericContainer<T>& dan sejumlah nilai, lalu memasukkan setiap nilai ke container menggunakan ekspresi fold.

  • main.cpp: Baca lima input (masing-masing pada baris terpisah):
    1. Bilangan bulat pertama
    2. Bilangan bulat kedua
    3. Bilangan bulat ketiga
    4. Nilai double
    5. Nilai boolean dalam bentuk string (true atau false)

    Demonstrasikan container-mu dengan cara:

    1. Membuat GenericContainer<int> dengan kapasitas 10
    2. Menggunakan pushAll untuk menambahkan ketiga bilangan bulat sekaligus
    3. Mencetak ukuran: Int container size: <size>
    4. Memanggil printContainer untuk menampilkan bilangan bulat
    5. Membuat GenericContainer<double> dengan kapasitas 5
    6. Memasukkan nilai double dan literal 2.5 menggunakan pemanggilan push secara terpisah
    7. Memanggil printContainer untuk menampilkan nilai double
    8. Membuat GenericContainer<bool> dengan kapasitas 5
    9. Memasukkan input boolean dan literal false
    10. Memanggil printContainer untuk menampilkan nilai boolean (seharusnya menampilkan true/false)

Contohnya, dengan input 10, 20, 30, 3.14, dan true:

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

Tantangan ini menggabungkan template class untuk container, spesialisasi template untuk pencetakan bool khusus, dan template variadik untuk fungsi pushAll yang fleksibel. Container-mu mengelola memorinya sendiri dengan mengikuti prinsip RAII, yang menunjukkan cara template terintegrasi dengan pengelolaan sumber daya yang tepat.

Coba sendiri

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

using namespace std;

int main() {
    // Baca input
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Ubah string menjadi bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Buat GenericContainer<int> dengan kapasitas 10
    
    // TODO: Gunakan pushAll untuk menambahkan ketiga bilangan bulat sekaligus
    
    // TODO: Tampilkan ukurannya: "Int container size: <size>"
    
    // TODO: Panggil printContainer untuk menampilkan bilangan bulat
    
    // TODO: Buat GenericContainer<double> dengan kapasitas 5
    
    // TODO: Lakukan push untuk nilai double dan 2.5 secara terpisah
    
    // TODO: Panggil printContainer untuk menampilkan nilai double
    
    // TODO: Buat GenericContainer<bool> dengan kapasitas 5
    
    // TODO: Lakukan push untuk input boolean dan false
    
    // TODO: Panggil printContainer untuk menampilkan nilai boolean
    
    return 0;
}

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online