Rangkuman: Pembungkus string
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 16 dari 61.
Tantangan
MudahMari buat module StringObject yang membungkus array karakter yang dialokasikan secara dinamis. Tantangan rangkuman ini menggabungkan seluruh siklus hidup object, constructor, method hanya-baca, dan destructor yang bekerja bersama untuk mengelola memori dengan aman.
Kamu akan membuat tiga file:
stringobj.h: Deklarasikan structStringObjectdengan satu anggota:char *text(pointer ke string yang dialokasikan secara dinamis). Deklarasikan juga tiga fungsi:create_string: menerima inputconst char *dan mengembalikan pointer ke StringObject yang baru dialokasikanprint_string: menerimaconst StringObject *dan menampilkan teks yang tersimpanfree_string: menerimaStringObject *dan membebaskan semua memori yang dialokasikan
STRINGOBJ_H.stringobj.c: Implementasikan ketiga fungsi. Constructor-mu harus mengalokasikan memori untuk struct, lalu mengalokasikan memori untuk teks (ingat,strlenditambah satu untuk terminator null), lalu menyalin string input. Destructor-mu harus membebaskan memori dengan urutan terbalik: buffer internaltextterlebih dahulu, lalu struct itu sendiri. Sertakan pemeriksaan NULL dalam destructor untuk keamanan.main.c: Gunakan module-mu untuk membuat object string, menampilkan isinya, lalu membersihkan memori dengan benar.
Kamu akan menerima satu input: string teks untuk disimpan dalam StringObject.
Di file utama, buat StringObject dengan teks yang diberikan, tampilkan isinya, bebaskan memorinya, lalu cetak pesan konfirmasi.
Fungsi print_string harus menghasilkan output dengan format ini:
Text: {text}Setelah membebaskan memori, cetak:
FreedMisalnya, dengan input Hello World, outputnya akan seperti ini:
Text: Hello World
FreedCoba sendiri
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Hapus karakter baris baru jika ada
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Buat StringObject dari teks input
// TODO: Cetak string menggunakan print_string
// TODO: Bebaskan StringObject menggunakan free_string
// TODO: Cetak "Freed" untuk memastikan pembersihan selesai
return 0;
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online