Menu
CoddyTech

Ulasan: Kotak Rahasia

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 21 dari 61.

challenge icon

Tantangan

Mudah

Mari 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 tipe Box opaque hanya dengan deklarasi awal: isi struct tetap tersembunyi. Deklarasikan fungsi-fungsi berikut:
    • create_box: menerima tiga bilangan bulat (width, height, depth) dan mengembalikan pointer Box
    • destroy_box: membebaskan memori yang dialokasikan
    • get_volume: menerima const Box * dan mengembalikan volume (width × height × depth)
    • set_dimensions: menerima pointer Box dan tiga nilai dimensi baru, lalu mengembalikan int (1 jika berhasil, 0 jika ada dimensi yang negatif atau nol)
    Gunakan include guard dengan simbol BOX_H.
  • box.c: Definisikan struct Box yang sebenarnya dengan tiga anggota tersembunyi: int width, int height, dan int depth. Implementasikan keempat fungsi. Konstruktor harus mengalokasikan dan menginisialisasi box. Fungsi set_dimensions harus 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}
Destroyed

Contohnya, dengan input 2, 3, 4, 5, 5, 5, outputnya adalah:

Volume: 24
Set: 1
Volume: 125
Destroyed

Dengan input 2, 3, 4, -1, 5, 5, outputnya adalah:

Volume: 24
Set: 0
Volume: 24
Destroyed

Perhatikan 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

Latihan sendiri: Compiler C online