Ulasan: Kotak Rahasia
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 21 dari 61.
Tantangan
MudahMari buat module Box yang menunjukkan enkapsulasi secara menyeluruh. Box-mu akan memiliki tiga dimensi tersembunyi, width, height, dan depth, yang hanya dapat diakses melalui fungsi yang kamu sediakan. Inilah penerapan pola pointer opaque secara lengkap!
Kamu akan membuat tiga file:
box.h: Antarmuka publikmu. Deklarasikan tipeBoxopaque hanya dengan deklarasi awal: isi struct tetap tersembunyi. Deklarasikan fungsi-fungsi berikut:create_box: menerima tiga bilangan bulat (width, height, depth) dan mengembalikan pointer Boxdestroy_box: membebaskan memori yang dialokasikanget_volume: menerimaconst Box *dan mengembalikan volume (width × height × depth)set_dimensions: menerima pointer Box dan tiga nilai dimensi baru, lalu mengembalikanint(1 jika berhasil, 0 jika ada dimensi yang negatif atau nol)
BOX_H.box.c: Definisikanstruct Boxyang sebenarnya dengan tiga anggota tersembunyi:int width,int height, danint depth. Implementasikan keempat fungsi. Konstruktor harus mengalokasikan dan menginisialisasi box. Fungsiset_dimensionsharus memastikan ketiga nilai positif (lebih besar dari nol) sebelum menerapkan perubahan. Jika ada nilai yang tidak lolos validasi, tolak seluruh pembaruan dan kembalikan 0.main.c: Tunjukkan Box yang dienkapsulasi dengan membuatnya, memeriksa volumenya, mencoba mengubah dimensinya (dengan nilai valid dan tidak valid), lalu membersihkan sumber daya dengan benar.
Kamu akan menerima lima input: width awal, height awal, depth awal, diikuti tiga dimensi baru yang akan dicoba untuk ditetapkan (yang mungkin mencakup nilai tidak valid).
Di file utamamu, buat Box dengan dimensi awal dan cetak volumenya. Lalu, coba tetapkan dimensi baru: cetak apakah pembaruan berhasil dan volume yang dihasilkan. Terakhir, bebaskan box dan pastikan pembersihan selesai.
Cetak output dengan format berikut:
Volume: {volume}
Set: {0 or 1}
Volume: {volume}
DestroyedContohnya, dengan input 2, 3, 4, 5, 5, 5, outputnya adalah:
Volume: 24
Set: 1
Volume: 125
DestroyedDengan input 2, 3, 4, -1, 5, 5, outputnya adalah:
Volume: 24
Set: 0
Volume: 24
DestroyedPerhatikan bagaimana validasi dalam set_dimensions melindungi box-mu dari kondisi yang tidak valid: kode eksternal tidak dapat melewati aturanmu karena dimensinya sepenuhnya tersembunyi di balik antarmukamu.
Coba sendiri
#include <stdio.h>
#include "box.h"
int main() {
// Baca dimensi awal
int width, height, depth;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &depth);
// Baca dimensi baru untuk dicoba
int new_w, new_h, new_d;
scanf("%d", &new_w);
scanf("%d", &new_h);
scanf("%d", &new_d);
// TODO: Buat Box dengan dimensi awal
// TODO: Cetak volume awal dengan format: "Volume: {volume}"
// TODO: Coba atur dimensi baru dan simpan hasilnya
// TODO: Cetak apakah pengaturan dimensi berhasil dengan format: "Set: {0 or 1}"
// TODO: Cetak volume yang dihasilkan dengan format: "Volume: {volume}"
// TODO: Hapus Box dan cetak "Destroyed"
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