Rangkuman: class String
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 26 dari 104.
Tantangan
MudahMari kita buat class String lengkap yang mengelola array karakter dinamisnya sendiri, dengan menggabungkan semua konsep constructor dan destructor dari bab ini. Ini adalah latihan klasik yang mencerminkan cara kerja internal std::string.
Kamu akan membuat dua file untuk mengatur kodemu:
String.h: Definisikan classStringdengan mengikuti Rule of Five. Class-mu harus mengelola pointerchar*bernamadatadan membersize_t length. Implementasikan:- default constructor yang membuat string kosong (alokasikan satu karakter untuk terminator null, atur length menjadi 0). Cetak
"Default constructed" - parameterized constructor yang menerima
const char*dan menyalin C-string ke memori yang baru dialokasikan. Cetak"Constructed: <text>" - copy constructor yang melakukan deep copy dari String lain. Cetak
"Copied: <text>" - move constructor (ditandai dengan
noexcept) yang memindahkan kepemilikan. Cetak"Moved: <text>"menggunakan teks sebelum sumbernya dijadikan null - destructor yang membebaskan memori dengan aman (periksa apakah null). Cetak
"Destroyed: <text>"(cetak"Destroyed: (empty)"jika data bernilai null atau length bernilai 0) - method
size()yang mengembalikan length - method
c_str()yang mengembalikan pointer karakter (kembalikan""jika null)
- default constructor yang membuat string kosong (alokasikan satu karakter untuk terminator null, atur length menjadi 0). Cetak
main.cpp: Tunjukkan cara kerja semua constructor secara bersama-sama. Baca string teks dari input, lalu:- Buat
Stringbernamas1menggunakan default constructor - Buat
Stringbernamas2dengan teks input - Buat
Stringbernamas3dengan menyalins2 - Buat
Stringbernamas4dengan memindahkan isi daris2 - Cetak
"--- Status ---" - Untuk setiap string (s1 sampai s4), cetak
"s<n>: \"<text>\" (length: <len>)"
- Buat
Gunakan initializer list di semua constructor agar lebih efisien. Setelah pemindahan, s2 seharusnya kosong dengan length 0, sedangkan s4 menyimpan teks aslinya. Pesan destructor di bagian akhir akan menunjukkan bahwa keempat object dibersihkan dalam urutan terbalik dari pembuatannya.
Sertakan <cstring> untuk strlen dan strcpy, serta <utility> untuk std::move(). Jangan lupa header guard di file header-mu.
Coba sendiri
#include <iostream>
#include <string>
#include "String.h"
using namespace std;
int main() {
string input;
getline(cin, input);
// TODO: Buat String s1 menggunakan konstruktor default
// TODO: Buat String s2 dengan teks input
// TODO: Buat String s3 dengan menyalin s2
// TODO: Buat String s4 dengan memindahkan dari s2 (gunakan std::move)
// Cetak judul status
cout << "--- Status ---" << endl;
// TODO: Cetak status untuk setiap string dari s1 hingga s4
// Format: "s<n>: \"<text>\" (length: <len>)"
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