Özet: Gizli Kutu
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 21 / 61.
Görev
KolayTam kapsüllemeyi gösteren bir Box modülü oluşturalım. Kutunuzun üç gizli boyutu olacak: width, height ve depth; bunlara yalnızca sağladığınız işlevler aracılığıyla erişilebilecek. Bu, tam opak işaretçi deseninin uygulamadaki hâlidir!
Üç dosya oluşturacaksınız:
box.h: Genel arayüzünüz. Yalnızca ileri bildirim kullanarak opak birBoxtürü bildirin: struct gövdesi gizli kalmalıdır. Şu işlevleri bildirin:create_box: üç tamsayı (width, height, depth) alır ve bir Box işaretçisi döndürürdestroy_box: ayrılmış belleği serbest bırakırget_volume: birconst Box *alır ve hacmi (width × height × depth) döndürürset_dimensions: bir Box işaretçisi ve üç yeni boyut değeri alır,intdöndürür (başarılı olursa 1, herhangi bir boyut negatif veya sıfırsa 0)
BOX_Hsembolüyle include korumaları kullanın.box.c: Üç gizli üyeye sahip gerçekstruct Boxyapısını tanımlayın:int width,int heightveint depth. Dört işlevin tamamını uygulayın. Yapıcınız kutuyu ayırmalı ve başlatmalıdır.set_dimensionsişlevi, değişiklikleri uygulamadan önce üç değerin de pozitif (sıfırdan büyük) olduğunu doğrulamalıdır; değerlerden herhangi biri doğrulamadan geçemezse güncellemenin tamamını reddetmeli ve 0 döndürmelidir.main.c: Kapsüllenmiş Box'ınızı bir tane oluşturarak, hacmini kontrol ederek, boyut değişikliklerini (hem geçerli hem de geçersiz) deneyerek ve uygun şekilde temizleyerek gösterin.
Beş girdi alacaksınız: initial width, initial height, initial depth ve ardından ayarlamayı deneyeceğiniz three new dimensions (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 ortaya çıkan hacmi yazdırın. Son olarak kutuyu serbest bırakın ve temizleme işlemini doğrulayın.
Çıktıyı şu biçimde yazdırın:
Volume: {volume}
Set: {0 or 1}
Volume: {volume}
DestroyedÖrneğin girdiler 2, 3, 4, 5, 5, 5 olduğunda çıktı şöyle olur:
Volume: 24
Set: 1
Volume: 125
DestroyedGirdiler 2, 3, 4, -1, 5, 5 olduğunda çıktı şöyle olur:
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ğundan, harici kod kurallarınızı atlayamaz.
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);
// Denenecek 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: Ortaya çıkan hacmi şu formatta yazdır: "Volume: {volume}"
// TODO: Kutuyu yok et ve "Destroyed" yazdır
return 0;
}
Nesne Yönelimli Programlama 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şisiKendi başına pratik yap: Online C derleyicisi