Menu
CoddyTech

Rangkuman, Container Generik

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

challenge icon

Tantangan

Mudah

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

Kamu akan membagi kodemu ke dalam dua file:

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

    Menyimpan elemen secara dinamis menggunakan pointer ke array, serta 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 mencukupi untuk tantangan ini)
    • get(size_t index): mengembalikan elemen pada indeks yang diberikan
    • getSize(): mengembalikan jumlah elemen saat ini

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

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

    Tambahkan fungsi template variadik bernama pushAll yang menerima GenericContainer<T>& dan sejumlah nilai, lalu mendorong setiap nilai ke dalam container menggunakan ekspresi fold. Fold dengan operator koma, seperti (container.push(args), ...);, menjalankan pemanggilan satu kali untuk setiap argumen.

  • 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. Boolean dalam bentuk string (true atau false)

    Tunjukkan cara kerja containermu dengan:

    1. Membuat GenericContainer<int> dengan kapasitas 10
    2. Menggunakan pushAll untuk menambahkan ketiga bilangan bulat sekaligus
    3. Mencetak ukurannya: Int container size: <size>
    4. Memanggil printContainer untuk menampilkan bilangan bulat
    5. Membuat GenericContainer<double> dengan kapasitas 5
    6. Mendorong nilai double dan nilai literal 2.5 menggunakan pemanggilan push satu per satu
    7. Memanggil printContainer untuk menampilkan nilai double
    8. Membuat GenericContainer<bool> dengan kapasitas 5
    9. Mendorong input boolean dan nilai 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 berintegrasi 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: Cetak ukurannya: "Int container size: <size>"
    
    // TODO: Panggil printContainer untuk menampilkan bilangan bulat
    
    // TODO: Buat GenericContainer<double> dengan kapasitas 5
    
    // TODO: push nilai double dan 2.5 dengan pemanggilan push terpisah
    
    // TODO: Panggil printContainer untuk menampilkan nilai double
    
    // TODO: Buat GenericContainer<bool> dengan kapasitas 5
    
    // TODO: push input boolean dan false
    
    // TODO: Panggil printContainer untuk menampilkan nilai boolean
    
    return 0;
}

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online