Menu
Coddy logo textTech

Özet: Gizli Kutu

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 21 / 61.

challenge icon

Görev

Kolay

Tam kapsüllemeyi (encapsulation) gösteren bir Box modülü oluşturalım. Kutunuzun yalnızca sağladığınız fonksiyonlar aracılığıyla erişilebilen üç gizli boyutu (genişlik, yükseklik ve derinlik) olacak. Bu, tam opak işaretçi (opaque pointer) deseninin uygulamalı bir örneğidir!

Üç dosya oluşturacaksınız:

  • box.h: Genel arayüzünüz. Yalnızca bir ön bildirim (forward declaration) kullanarak opak bir Box türü bildirin; struct gövdesi gizli kalmalıdır. Şu fonksiyonları bildirin:
    • create_box — üç tam sayı (genişlik, yükseklik, derinlik) alır ve bir Box işaretçisi döndürür
    • destroy_box — ayrılan belleği serbest bırakır
    • get_volume — bir const Box * alır ve hacmi (genişlik × yükseklik × derinlik) döndürür
    • set_dimensions — bir Box işaretçisi ve üç yeni boyut değeri alır, int döndürür (başarı için 1, herhangi bir boyut negatif veya sıfırsa 0)
    BOX_H sembolü ile include guard kullanın.
  • box.c: Üç gizli üyeye sahip gerçek struct Box yapısını tanımlayın: int width, int height ve int depth. Dört fonksiyonun tamamını uygulayın. Yapıcınız (constructor) kutuyu tahsis etmeli ve başlatmalıdır. set_dimensions fonksiyonu, değişiklikleri uygulamadan önce her üç değerin de pozitif (sıfırdan büyük) olduğunu doğrulamalıdır; herhangi bir değer doğrulamadan geçemezse, tüm güncellemeyi reddedin ve 0 döndürün.
  • main.c: Bir kutu oluşturarak, hacmini kontrol ederek, boyut değişikliklerini deneyerek (hem geçerli hem de geçersiz) ve düzgün bir şekilde temizleyerek kapsüllenmiş Box yapınızı gösterin.

Beş girdi alacaksınız: başlangıç genişliği, başlangıç yüksekliği, başlangıç derinliği ve ardından ayarlanmaya çalışılacak üç yeni boyut (geçersiz değerler içerebilir).

Ana dosyanızda, başlangıç boyutlarıyla bir Box oluşturun ve hacmini yazdırın. Ardından yeni boyutları ayarlamayı deneyin; güncellemenin başarılı olup olmadığını ve sonuçtaki hacmi yazdırın. Son olarak, kutuyu serbest bırakın ve temizliği onaylayın.

Çıktıyı şu formatta yazdırın:

Volume: {volume}
Set: {0 or 1}
Volume: {volume}
Destroyed

Örneğin, 2, 3, 4, 5, 5, 5 girdileriyle çıktı şöyle olacaktır:

Volume: 24
Set: 1
Volume: 125
Destroyed

2, 3, 4, -1, 5, 5 girdileriyle çıktı şöyle olacaktır:

Volume: 24
Set: 0
Volume: 24
Destroyed

set_dimensions içindeki doğrulamanın kutunuzu geçersiz durumlardan nasıl koruduğuna dikkat edin; boyutlar arayüzünüzün arkasında tamamen gizli olduğu için harici kod kurallarınızı baypas edemez.

Kendin dene

#include <stdio.h>
#include "box.h"

int main() {
    // Başlangıç boyutlarını oku
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Denecek yeni boyutları oku
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Başlangıç boyutlarıyla bir Box oluştur
    
    
    // TODO: Başlangıç hacmini şu formatta yazdır: "Volume: {volume}"
    
    
    // TODO: Yeni boyutları ayarlamayı dene ve sonucu sakla
    
    
    // TODO: Ayarlamanın başarılı olup olmadığını şu formatta yazdır: "Set: {0 or 1}"
    
    
    // TODO: Sonuç hacmini şu formatta yazdır: "Volume: {volume}"
    
    
    // TODO: Kutuyu yok et ve "Destroyed" yazdır
    
    
    return 0;
}

Object Oriented Programming bölümündeki tüm dersler