Rangkuman: Pengelola Array Dinamis
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 17 dari 104.
Tantangan
MudahMari kita buat class DynamicArray yang mengelola memorinya sendiri dan bertambah secara otomatis saat diperlukan, seperti cara kerja std::vector di balik layar!
Kamu akan membuat dua file untuk menata kodemu:
DynamicArray.h: Definisikan classDynamicArrayyang mengelola array integer dengan ukuran dinamis. Class-mu harus memiliki:- Anggota private: pointer ke array data, ukuran saat ini (jumlah elemen), dan kapasitas (ruang yang dialokasikan)
- Constructor yang menerima kapasitas awal, mengalokasikan array di heap, dan menginisialisasi ukuran menjadi 0
- Destructor yang membebaskan memori yang dialokasikan dan mencetak
"DynamicArray destroyed" - Method
push(int value)yang menambahkan elemen ke array. Jika array penuh, kapasitasnya harus digandakan dengan mengalokasikan array baru yang lebih besar, menyalin elemen yang ada, lalu membebaskan array lama - Method
get(size_t index)yang mengembalikan elemen pada indeks yang diberikan - Method
getSize()yang mengembalikan jumlah elemen saat ini - Method
getCapacity()yang mengembalikan kapasitas saat ini
main.cpp: Baca kapasitas awal dan jumlah nilai yang akan ditambahkan. Kemudian baca sejumlah nilai integer tersebut dan masukkan masing-masing ke dalam DynamicArray-mu dengan push. Setelah semua nilai ditambahkan, cetak:"Size: <size>""Capacity: <capacity>""Elements: <e1> <e2> ..."(semua elemen dipisahkan oleh spasi)
Format inputnya adalah:
- Baris pertama: kapasitas awal (integer)
- Baris kedua: jumlah nilai yang akan ditambahkan (integer)
- Baris berikutnya: satu nilai integer per baris
Saat mengubah ukuran, array-mu harus menggandakan kapasitasnya. Contohnya, jika kamu memulai dengan kapasitas 2 dan memasukkan elemen ketiga, kapasitasnya harus menjadi 4. Ini menunjukkan prinsip RAII. Class-mu memperoleh memori di constructor dan melepaskannya di destructor, sehingga tidak terjadi kebocoran memori.
Sertakan file header-mu di main.cpp menggunakan #include "DynamicArray.h".
Coba sendiri
#include <iostream>
#include "DynamicArray.h"
using namespace std;
int main() {
// Baca kapasitas awal
int initialCapacity;
cin >> initialCapacity;
// Baca jumlah nilai yang akan ditambahkan
int numValues;
cin >> numValues;
// TODO: Buat DynamicArray dengan kapasitas awal
// TODO: Baca numValues bilangan bulat dan push masing-masing ke array
// TODO: Cetak "Size: <size>"
// TODO: Cetak "Capacity: <capacity>"
// TODO: Cetak "Elements: <e1> <e2> ..." (pisahkan semua elemen dengan spasi)
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