Menu
CoddyTech

Rangkuman: class String

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

challenge icon

Tantangan

Mudah

Mari 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 class String dengan mengikuti Rule of Five. Class-mu harus mengelola pointer char* bernama data dan member size_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)
  • main.cpp: Tunjukkan cara kerja semua constructor secara bersama-sama. Baca string teks dari input, lalu:
    • Buat String bernama s1 menggunakan default constructor
    • Buat String bernama s2 dengan teks input
    • Buat String bernama s3 dengan menyalin s2
    • Buat String bernama s4 dengan memindahkan isi dari s2
    • Cetak "--- Status ---"
    • Untuk setiap string (s1 sampai s4), cetak "s<n>: \"<text>\" (length: <len>)"

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

Latihan sendiri: Compiler C++ online