Rangkuman, Container Generik
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 69 dari 104.
Tantangan
MudahMari 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.GenericContainerharus: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 diberikangetSize(): mengembalikan jumlah elemen saat ini
Tambahkan template fungsi bernama
printContaineryang menerimaGenericContainer<T>&dan mencetak semua elemen yang dipisahkan spasi, lalu diikuti baris baru.Buat spesialisasi template untuk
printContainerbagiGenericContainer<bool>yang mencetaktrueataufalse, bukan1atau0.Tambahkan template fungsi variadik bernama
pushAllyang menerimaGenericContainer<T>&dan sejumlah nilai, lalu memasukkan setiap nilai ke container menggunakan ekspresi fold.main.cpp: Baca lima input (masing-masing pada baris terpisah):- Bilangan bulat pertama
- Bilangan bulat kedua
- Bilangan bulat ketiga
- Nilai double
- Nilai boolean dalam bentuk string (
trueataufalse)
Demonstrasikan container-mu dengan cara:
- Membuat
GenericContainer<int>dengan kapasitas 10 - Menggunakan
pushAlluntuk menambahkan ketiga bilangan bulat sekaligus - Mencetak ukuran:
Int container size: <size> - Memanggil
printContaineruntuk menampilkan bilangan bulat - Membuat
GenericContainer<double>dengan kapasitas 5 - Memasukkan nilai double dan literal
2.5menggunakan pemanggilanpushsecara terpisah - Memanggil
printContaineruntuk menampilkan nilai double - Membuat
GenericContainer<bool>dengan kapasitas 5 - Memasukkan input boolean dan literal
false - Memanggil
printContaineruntuk menampilkan nilai boolean (seharusnya menampilkantrue/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
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online