Özet: Gizli Kutu
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 21 / 61.
Görev
KolayTam 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 birBoxtü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ürdestroy_box— ayrılan belleği serbest bırakırget_volume— birconst Box *alır ve hacmi (genişlik × yükseklik × derinlik) döndürürset_dimensions— bir Box işaretçisi ve üç yeni boyut değeri alır,intdöndürür (başarı için 1, herhangi bir boyut negatif veya sıfırsa 0)
BOX_Hsembolü ile include guard kullanın.box.c: Üç gizli üyeye sahip gerçekstruct Boxyapısını tanımlayın:int width,int heightveint depth. Dört fonksiyonun tamamını uygulayın. Yapıcınız (constructor) kutuyu tahsis etmeli ve başlatmalıdır.set_dimensionsfonksiyonu, 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
Destroyed2, 3, 4, -1, 5, 5 girdileriyle çıktı şöyle olacaktır:
Volume: 24
Set: 0
Volume: 24
Destroyedset_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
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil Hiyerarşisi